检查子数组的值,在新数组中使用key作为新值 - PHP

时间:2013-09-26 17:46:49

标签: php arrays multidimensional-array

我有一个数组,我们称之为$ 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)其中value等于$ mainArray的键名,但只有那些子数组(如果有的话)在其中某处包含值“20”的那些值。例如,我的新数组(称为$ arrayOne)将为[0] => 5,[1] => 80,[2] => 666。

2)与上面类似,但是没有子阵列,或者如果有,则不包括“20”作为值。所以(称之为$ arrayTwo)将是[0] => 1,[1] => 777,[2] => 555。

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

3 个答案:

答案 0 :(得分:0)

这会吗?:

<?php

    foreach( $mainArray as $mKey => &$mVal )
    {
        if( in_array( 20, $mVal ) )
        {
            $arrayOne[] = $mKey;
        }
        else
        {
            $arrayTwo[] = $mKey;
        }
    }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以这样做:

$newArray = array();
foreach($mainArray as $key => $subArray) {
  if (in_array(20, $subArray)) {
    $newArray[] = $key;
  }
}