2015-11-05 136 views
0

我正在开发一个自定义PHP项目,我需要获取多维数组的子集。在不影响密钥的情况下过滤多维数组

我有一个数组

 
Array 
(
    [0] => Array 
     (
      [0] => 2011 
      [1] => Allegany 
      [2] => 55.4 
     ) 

    [1] => Array 
     (
      [0] => 2012 
      [1] => Albany 
      [2] => 325.1 
     ) 

    [2] => Array 
     (
      [0] => 2011 
      [1] => Bronx 
      [2] => 11 
     ) 
    [3] => Array 
     (
      [0] => 2012 
      [1] => Bronx 
      [2] => 11 
     ) 
) 

欲返回一个阵列,其中[0] => 2012存在,像下面

 
Array 
(


    [1] => Array 
     (
      [0] => 2012 
      [1] => Albany 
      [2] => 325.1 
     ) 


    [3] => Array 
     (
      [0] => 2012 
      [1] => Bronx 
      [2] => 11 
     ) 
) 
+0

好吧,那么你需要检查数组中的所有项目寻找匹配并检查你是否有一个关键为0和值为2012的子项。这是什么交易? – Amarnasan

回答

2

array_filter()功能被写入允许您根据可定制的标准从阵列中选择一个子集条目

$subset = array_filter(
    $originalArray, 
    function($value) { 
     return isset($value[0]) && $value[0] == 2012; 
    } 
); 

或更通用的变种:

$searchColumn = 0; 
$searchValue = 2012; 

$subset = array_filter(
    $originalArray, 
    function($value) use ($searchColumn, $searchValue) { 
     return isset($value[$searchColumn]) && $value[$searchColumn] == $searchValue; 
    } 
); 

编辑

变,以简化在不同的列

$searchCriteria = [0 => 2012, 2 => 11]; 

$subset = array_filter(
    $originalArray, 
    function($value) use ($searchCriteria) { 
     return count($searchCriteria) == count(array_intersect_assoc($value, $searchCriteria)); 
    } 
); 
+0

巨大的答案:)顺便说一句,以防万一,没有使用任何函数的逻辑:'foreach($ arr as $ key => $ v)if($ v [0] == 2012)$ out [$ key] = $ v;' – someOne

+0

非常感谢。这是完美的。但是,如果我必须过滤两个元素,如“[0] => 2012和[2] => 11” – Amrit

+0

然后,您可以修改回调函数的逻辑'return isset($ value [0])&& $ value [ 0] == 2012 && isset($ value [2])&& $ value [2] == 11; ' –

相关问题