PHP: 涉及分解键的映射数组
PHP: map array with explode keys involved
在尝试使用多个 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,
]
];
背景:我想让用户在 <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,
]
];
在尝试使用多个 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,
]
];
背景:我想让用户在 <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,
]
];