Php 过滤多维数组而不影响密钥

Php 过滤多维数组而不影响密钥,php,arrays,multidimensional-array,filter,Php,Arrays,Multidimensional Array,Filter,我正在做一个定制的PHP项目,我需要得到多维数组的子集 我有一个数组 Array ( [0] => Array ( [0] => 2011 [1] => Allegany [2] => 55.4 ) [1] => Array ( [0] => 2012 [1] => Albany [2]

我正在做一个定制的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]=>阵列 ( [0] => 2011 [1] =>阿勒加尼 [2] => 55.4 ) [1] =>阵列 ( [0] => 2012 [1] =>奥尔巴尼 [2] => 325.1 ) [2] =>阵列 ( [0] => 2011 [1] =>布朗克斯 [2] => 11 ) [3] =>阵列 ( [0] => 2012 [1] =>布朗克斯 [2] => 11 ) ) 我想返回一个数组,其中存在[0]=>2012,如下所示

Array ( [1] => Array ( [0] => 2012 [1] => Albany [2] => 325.1 ) [3] => Array ( [0] => 2012 [1] => Bronx [2] => 11 ) ) 排列 ( [1] =>阵列 ( [0] => 2012 [1] =>奥尔巴尼 [2] => 325.1 ) [3] =>阵列 ( [0] => 2012 [1] =>布朗克斯 [2] => 11 ) ) 编写此函数是为了允许您根据可自定义条件从数组中选择条目子集

$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且值为2012的子项。交易是什么?巨大的答案:)顺便说一句,不使用任何函数的逻辑:
foreach($arr as$key=>$v)if($v[0]==2012)$out[$key]=v非常感谢。那很好用。但是如果我必须过滤两个元素,比如“[0]=>2012和[2]=>11”,那么您需要修改回调的逻辑
return-isset($value[0])&&&$value[0]==2012&&isset($value[2])&&$value[2]==11