2013-09-26 41 views
0

我有一个数组,我们把它叫做$ mainArray,它看起来像这样: -检查子阵列的值,使用密钥,以新阵新的价值 - PHP

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。

我试过每个循环的负载,甚至有一点RecursiveIteratorIterator(无论是!),但似乎无法以我需要的方式引用键和值。任何帮助将非常感激!

回答

0

这会不会做?:

<?php 

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

似乎....非常感谢! –

+0

没问题,请务必在之后对它们进行任何操作之前检查数组是否已设置/清空。 – Jason

0

我相信你可以创建,如果数组包含20,因为它的价值或者没有这将检查功能。我们称这个函数为has20。然后

你们两个新的阵列将array_filter($mainArray, 'has20')array_filter($mainArray, function ($x) {return !has20($x);})

0

你可以这样说:

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