我不确定如何搜索我所面临的问题,所以这就是我在这里问的原因。
我想知道是否有一个原生的php函数来转换我从html格式获得的数组:
$array = [
'product_template_id' => [
'0' => '1',
'1' => '2'
],
'amount' => [
'0' => '50',
'1' => '100'
]
]
$array = [
'0' => [
'product_template_id' => '1',
'amount' => '50'
],
'1' => [
'product_template_id' => '2',
'amount' => '100'
]
]
我知道这可以通过循环完成,但这不是我要求的。
PS(不是我的主要问题,只是一个问题):我如何在stackoverflow中批量格式化代码?它总是4个空格吗?如何更快地执行格式化?
编辑:PS不是主要问题,它更像是@RiggsFolly已经回答的旁注
答案 0 :(得分:2)
正如概念验证一样,您可以使用array_map
:
$keys = array_keys($array);
// For < PHPv5.6
// $zip = call_user_func_array('array_map', array_merge([null], $array));
$zip = array_map(null, ...array_values($array));
$result = array_map(function ($item) use ($keys) {
return array_combine($keys, $item);
}, $zip);
这是working demo。
但在实践中,这么简单的问题会产生太大的开销。
修改强>
这里我压缩(从每个数组中获取一个相应的元素并创建这个元素的数组)所有子数组。它是使用array_map
使用其属性完成的:
这个函数的一个有趣用途是构造一个数组数组,通过使用NULL作为回调函数的名称可以很容易地执行它
由于array_map
可以使用任意数量的数组,因此我使用'...' splat operator将其提供给它。
答案 1 :(得分:0)
这就是你需要的!
for ($x = 0; $x < count($array['amount']); $x ++) {
$arr[$x] = [
'product_template_id' => $array['product_template_id'][$x],
'amount' => $array['amount'][$x],
];
}
请参阅此处查看工作示例https://3v4l.org/dokHK