PHP:包含爆炸键的映射数组



在尝试用多个foreach循环解决此问题后,我仍然无法弄清楚如何将$arr映射到$arr_mapped

我需要爆炸$arr的键来获得一个元素,最多有三个新键来创建$arr_mapped


<?php
$arr = [
'abc:quantity' => 1,
'abc:variant' => 'blue',
'xyz:quantity' => 2,
'foo:quantity' => null
];
$arr_mapped = [
[
'id' => 'abc',
'quantity' => 1,
'variant' => 'blue'
],
[
'id' => 'xyz',
'quantity' => 2,
]
];

background:我想让用户在<form>中批量添加预定义的购物项目这是一个定制的PHP商店。


<form>
<input name="abc:quantity" value="1">
<input name="abc:variant" value="blue">
<input name="xyz:quantity" value="2">
<input name="foo:quantity" value="">
<button>Submit</button>
</form>

谢谢你的建议

我认为这将根据您在示例中提供的输入(似乎与示例中的输出不匹配)产生您想要的输出:

$arr = [
'abc:quantity' => 1,
'abc:variant' => 'blue',
'xyz:quantity' => 2,
'foo:quantity' => null
];
$arr_mapped = array_values(array_reduce(array_keys($arr), function($map, $key) use ($arr) {
[$id,$field] = explode(':', $key);
$map[$id]['id'] = $id;
$map[$id][$field] = $arr[$key];
return $map;
}, []));

结果:

[
[
'id' => 'abc',
'quantity' => 1,
'variant' => 'blue'
],
[
'id' => 'xyz',
'quantity' => 1,
],
[
'id' => 'foo',
'quantity' => null,
]
];

最新更新