我想获得具有特定条件的特定键,只使用数组函数从多维数组中索引 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'];
}
这给了我所有的设备令牌。
答案 0 :(得分:1)
array_filter应该为你做到:
$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);