抱歉,标题含糊,我很难用一个句子来概括这个问题(我愿意接受建议或修改)。
我有一个二维关联数组,每个键由2个数字组成。
赞:
Array
(
[one] => Array
(
[0] => 1
[1] => 2
)
[two] => Array
(
[0] => 1
[1] => 2
)
[three] => Array
(
[0] => 1
[1] => 2
)
)
我想知道是否有一种方法可以使用array_map()或array_filter()返回一个数组,该数组具有每个键和每个值数组中的第一个数字,如下所示:
Array
(
[one] => 1
[two] => 1
[three] => 1
)
我不希望通过使用循环或类似方法来创建新数组,如果您知道我的意思,我想即时进行转换作为函数的参数。
我可以编写自己的函数来实现此目的,但我想知道是否可以使用array_map()或array_filter()完成此功能。
我尝试使用array_merge(),array_keys()和array_values()的各种组合都没有成功。
在此先感谢您提供的任何帮助。
答案 0 :(得分:2)
我认为在这种情况下最好使用循环。但是,这应该适合您的情况。
<?php
$arr = array(
"one" => array(1, 2),
"two" => array(1, 2),
"three" => array(1, 2)
);
$res = array();
array_walk($arr, function ($v, $k) use (&$res) {
$res[$k] = $v[0];
});
print_r($res);
答案 1 :(得分:1)
第一个solution是:
$keys = array_keys($ar); // get all keys
$vals = array_column($ar,0); // get all values with 0 index
$res = array_combine($keys,$vals); // combine them
顺便说一句,您不需要使用一些额外的功能,简单的foreach
循环就是enough:
$res = [];
foreach($arr as $key=>$val){
$res[$key] = $val[0];
}
您可以看到array_walk
和foreach
函数here的性能差异。
答案 2 :(得分:1)
是的,它可以只使用一个带有回调的函数 array_map
来完成:
$arr
内的数组<?php
$arr = array(
"one" => [1, 2],
"two" => [1, 2],
"three" => [1, 2]
);
$res = array_map(fn($sub_arr)=>$sub_arr[0],$arr);
echo "<pre>";
print_r($res);
/*
Array
(
[one] => 1
[two] => 1
[three] => 1
)
*/
答案 3 :(得分:0)
使用array_map,您可以做类似的事情:
$array_2= array_map(function ($sub_array) {
$new_value = $sub_array[0];
return $new_value;
},$array_1);
答案 4 :(得分:0)
您可以使用array_reduce
来迭代地缩小数组。
return array_reduce(array_keys($attribs), function($carry, $key) use ($attribs){
$carry[$key]= $attribs[$key][0];
return $carry;
});
希望获得帮助,