【问题标题】:php reformat array representation from html form arrayphp从html表单数组重新格式化数组表示
【发布时间】:2017-09-15 08:35:20
【问题描述】:

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

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

【问题讨论】:

  • 不,没有任何本机功能可以做到这一点。您必须使用现有的 PHP 函数并添加一些逻辑(for 循环等......)
  • 格式 = CTRL+K
  • 如果您经常需要,您可以制作自己的函数。
  • 你可以这样做,一次性完成,使用 sublime IDE,从包安装程序中安装插件 codeFormatter 并创建一个 dummy.php 文件,粘贴你的代码,然后 CTRL + ALT + F要格式化代码并从那里复制该代码,请将其粘贴到 SO 问题中,然后选择要格式化的代码并按 CTRL + K。就是这样。
  • @DominikVogt,祝你好运

标签: php arrays format


【解决方案1】:

作为概念证明,您可以使用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

【讨论】:

  • @mickmackusa,有时称为splat operator。它用于参数解包。您可以阅读this blog post 了解更多信息。
  • 赞成这个答案!我受到这种技术的启发,并一直在研究和试验它。我已经修改了 OP 的输入数组并使用了您的方法,添加了一堆 cmets 并在此 Demo 中提供了几个链接。一些直接链接:PHP5.6FeaturesVariable Arg ListBishop's Answer
【解决方案2】:

这可以满足您的需要!

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

【讨论】:

  • :D :D :D :D :D 阅读 OP 的最后一行。这不是你给出答案的问题。
  • :-P 哈哈我现在明白了。如果您的数组始终具有相同的长度,当然可以在没有循环的情况下完成,但事实并非如此吗?
  • 如何在 stackoverflow 中批量格式化代码?总是4个空格吗?如何更快地执行格式化? 这是个问题。 Op 说:“我知道这可以通过循环来完成,但这不是我想要的。”。所以他知道该怎么做,他想在 SO 中格式化代码。 OP 根本不需要代码。 OP 需要在 SO 中格式化代码的步骤或方法。
  • 其实我也想知道,这4个空格的废话是在浪费宝贵的时间!
  • 是的,这很简单,如果需要像 IDE 这样的更多格式,请按照我的完整评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2019-08-13
  • 2014-04-26
  • 2019-05-19
  • 2016-04-12
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多