搜索具有多个结果的多维数组

时间:2015-05-14 02:48:02

标签: php arrays search multidimensional-array

假设我有一个数组,我想搜索一个应该返回多个结果的值:

array(2) {
  [0] => array(2) {
    ["id"] => string(2) "1"
    ["custom"] => string(1) "2"
    }
  [1] => array(2) {
    ["id"] => string(2) "2"
    ["custom"] => string(1) "5"
    }
  [2] => array(2) {
    ["id"] => string(2) "3"
    ["custom"] => string(1) "2"
    }
}

我想使用custom搜索关键value = 2,结果如下:

array(2) {
  [0] => array(2) {
    ["id"] => string(2) "1"
    ["custom"] => string(1) "2"
    }
  [1] => array(2) {
    ["id"] => string(2) "3"
    ["custom"] => string(1) "2"
    }
}

这是否可以不通过数组循环?是否有这样的类或内置函数?

3 个答案:

答案 0 :(得分:1)

您可以使用:

array_values( array_filter($array, function($item) { return $item['custom'] == 2; }) );

array_values($array)用于返回一个连续索引的数组,即从0,1,2,......向上。

答案 1 :(得分:0)

您可以通过从阵列中取消设置来删除您不想要的值:

foreach($array as $key => $item) {
    if($item['custom'] !== 2) {
        unset($array[$key]);
    }    
}

Example

这是array_values()的替代方案,但基本上也是这样做的。

答案 2 :(得分:0)

array_filter函数可能就是你想要的。

$array = [
    [
        'id' => '1',
        'custom' => '2'
    ],
    [
        'id' => '2',
        'custom' => '5'
    ],
    [
        'id' => '3',
        'custom' => '2'
    ]
];

$customs = array_filter(
    $array,
    function ($arr) {
        return is_array($arr) && array_key_exists('custom', $arr) && $arr['custom'] === '2';
    }
);