只在php中使用数组函数从多维数组中获取具有特定条件的特定列

时间:2016-01-04 12:34:01

标签: php arrays multidimensional-array

我想获得具有特定条件的特定键,只使用数组函数从多维数组中索引 0,1,2

使用forloop它正在获得,但我希望它使用数组函数进行代码优化

我的输入代码如:

Array
(
    [0] => Array
        (
            [device_token] => 1324
            [device_type] => 0
        )    
    [1] => Array
        (
            [device_token] => 2546
            [device_type] => 1
        )    
    [2] => Array
        (
            [device_token] => 13241
            [device_type] => 0
        )    
    [3] => Array
        (
            [device_token] => 12345
            [device_type] => 1
        )    
)

我只想要具有 device_type = 0 的device_token,格式如下:

Array
    (
        [0] => 1324,
        [1] => 13241,
)

我正在尝试以下代码:

$ios_token = array_map(function($r) {
            return $r['device_token'];
        }

这给了我所有的设备令牌。

4 个答案:

答案 0 :(得分:1)

array_filter应该为你做到:

  

http://php.net/manual/en/function.array-filter.php

$ios_token = array_filter($myArray, function($item) {
    return $item['device_type'] == 0;
});

迭代每个值,如果回调函数返回true,则返回数组的当前值。

然后你可以像你一样在array_map函数中传递你的变量:

$ios_token = array_map(function($item){
    return $item['device_token'];
}, $ios_token);

如果你想把所有东西分组:

$ios_token = array_map(function($item){
    return $item['device_token'];
}, array_filter($myArray, 
    function($item) {
        return $item['device_type'] == 0;
    }
));

答案 1 :(得分:1)

array_map()函数为您提供了更多阵列的可能性 func_array_map

function myfunction($v)
{
if ($v['device_type']==0)
   {
        return $v['device_token'];
   }
   return null;
}

$a=array(...) // your array here

print_r(array_values(array_filter(array_map("myfunction",$a))));

答案 2 :(得分:0)

您需要array_reduce

$ios_token = array_reduce(
    $your_array, 
    function($t, $v) {
        if ($v['device_type'] == 0)
            $t[] = $v['device_token'];

        return $t;
    },
    array()
);

答案 3 :(得分:0)

使用array_walk尝试简洁解决方案:

// assuming $arr is your main array
$result = [];
array_walk($arr, function($v) use(&$result){
     if ($v['device_type'] == 0) $result[] = $v['device_token'];
});
var_dump($result);