0

我有一个数组,我们称之为 $mainArray,它看起来像这样:-

Array
(
    [1] => Array
    (
    )

    [5] => Array
    (
        [0] => 10
        [1] => 15
        [2] => 20
        [3] => 25
    )

    [80] => Array
    (
        [0] => 20
        [1] => 40
        [2] => 50
        [3] => 60
    )

    [777] => Array
    (
        [0] => 100
        [1] => 200
        [2] => 300
        [3] => 400
    )

    [666] => Array
    (
        [0] => 1234
        [1] => 5678
        [2] => 20
        [3] => 9865
    )

    [555] => Array
    (
        [0] => 111
        [1] => 222
        [2] => 333
        [3] => 444
    )

)

我想要做的是创建2个新数组: -

1) 值等于 $mainArray 的键名的地方,但只有那些子数组(如果有)在其中某处包含值“20”的地方。例如,我的新数组(称为 $arrayOne)将是 [0] => 5、[1] => 80、[2] => 666。

2) 与上面类似,但是没有子数组,或者如果有,它不包含“20”作为值。因此(称为 $arrayTwo)将是 [0] => 1,[1] => 777,[2] =>555。

我已经尝试了 for each 循环的负载,甚至尝试了一点 RecursiveIteratorIterator(不管是什么!),但似乎无法以我需要的方式引用键和值。任何帮助将非常感激!

4

3 回答 3

0

我相信你可以创建一个函数来检查数组是否包含 20 作为它的值。让我们调用这个函数has20

你的两个新数组将是array_filter($mainArray, 'has20')并且array_filter($mainArray, function ($x) {return !has20($x);})

于 2013-09-26T17:52:28.303 回答
0

你可以这样做:

$newArray = array();
foreach($mainArray as $key => $subArray) {
  if (in_array(20, $subArray)) {
    $newArray[] = $key;
  }
}
于 2013-09-26T17:53:15.490 回答
0

这会做吗?:

<?php

    foreach( $mainArray as $mKey => &$mVal )
    {
        if( in_array( 20, $mVal ) )
        {
            $arrayOne[] = $mKey;
        }
        else
        {
            $arrayTwo[] = $mKey;
        }
    }
于 2013-09-26T17:51:12.977 回答