php从html表单数组重新格式化数组表示

时间:2017-04-19 08:20:10

标签: php arrays format

我不确定如何搜索我所面临的问题,所以这就是我在这里问的原因。

我想知道是否有一个原生的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已经回答的旁注

2 个答案:

答案 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