我有以下数组:
Array
(
[key1] => 10
[key2] => 7
[key3] => 8
)
我想将其转换为以下结构:
Array
(
[0] => Array
(
[section] => key1
[quantity] => 10
),
[1] => Array
(
[section] => key2
[quantity] => 7
),
[2] => Array
(
[section] => key3
[quantity] => 8
)
)
我尝试使用array_map
函数,但在闭包内部我只得到一个没有键的值。请在没有foreach
的情况下向我建议最简单的方法。
更新
我认为使用foreach需要创建一个额外的变量,这会使代码变得混乱和需要资源。
答案 0 :(得分:2)
尝试使用array_walk
作为
$result = array();
array_walk($arr, function ($v,$k) use(&$result) {
$result[] = array('section' => $k, 'quantity' => $v);
});
使用foreach
$result = array();
foreach($arr as $key => $value){
$result[] = array('section' => $key, 'quantity' => $value);
}
print_r($result);
答案 1 :(得分:1)
没有理由不为此使用foreach。最好的解决方案是:
$cookedArray = [];
foreach ($rawArray as $key => $value)
{
$cookedArray [] = ["section" => $key, "quantity" => $value];
}
答案 2 :(得分:1)
$previous_array=array(
'key1' => 10,
'key2' => 7,
'key3' => 8,
);
$new_array=array();
foreach($previous_array as $key => $value):
$new_array[]=array('section'=>$key,'quantity'=>$value);
endforeach;
Print_r($new_array);
<强>输出:强>
Array
(
[0] => Array
(
[section] => key1
[quantity] => 10
)
[1] => Array
(
[section] => key2
[quantity] => 7
)
[2] => Array
(
[section] => key3
[quantity] => 8
)
)
答案 3 :(得分:1)
关于更新的要求,我自己已经找到了这个解决方案:
$section = array_map(function ($key,$value) {
return ['section' => $key, 'quantity' => $value];
}, array_keys($section), array_values($section));
唯一关心的是关键和价值观。现在我正在测试,它不会互相搞乱,我的意思是键与值混合?
<强>更新强>
它工作正常。感谢@Halcyon在评论中的指点。以及所有提出解决方案的人。