【问题标题】:How to create a new array from an existing array such that all data of same index will be together under that index key?如何从现有数组创建一个新数组,以使相同索引的所有数据都在该索引键下?
【发布时间】:2014-06-21 16:09:57
【问题描述】:

我有一个名为 $_POST 的关联数组。这个数组本质上是动态的,它可以包含任何编号。的元素。供您参考,我生成了只有两个元素的 $_POST 数组。这个数组的内容如下:

Array
(
    [op] => preview
    [id] => 
    [form_submitted] => yes
    [company_id] => 46
    [product_id_1] => Array
        (
            [1] => 10
            [2] => 9
        )

    [pack] => Array
        (
            [1] => 10
            [2] => 50
        )

    [quantity] => Array
        (
            [1] => 20
            [2] => 60
        )

    [volume] => Array
        (
            [1] => 30
            [2] => 70
        )

    [units] => Array
        (
            [1] => 7
            [2] => 12
        )

    [amount] => Array
        (
            [1] => 40
            [2] => 80
        )

    [rebate_start_date] => Array
        (
            [1] => 2014-05-01
            [2] => 2014-06-01
        )

    [rebate_expiry_date] => Array
        (
            [1] => 2014-05-31
            [2] => 2014-06-30
        )

    [applicable_states] => Array
        (
            [1] => Array
                (
                    [0] => 3
                    [1] => 4
                    [2] => 10
                    [3] => 15
                    [4] => 17
                )

            [2] => Array
                (
                    [0] => 44
                    [1] => 45
                    [2] => 47
                    [3] => 49
                    [4] => 50
                )

        )

    [multiselect] => 50
    [rebate_total_count] => Array
        (
            [1] => 5000
            [2] => 10000
        )

    [product_id_2] => Array
        (
            [1] => 11
            [2] => 8
        )

)

现在我想要一个新数组,使得同一索引的所有数据都应该在一个值等于该索引的键下。如果您对我的要求感到困惑,请查看我要生成的以下数组:

Array
  (
    [op] => preview
    [id] => 
    [form_submitted] => yes
    [company_id] => 46    
    [1] => Array 
        (
        [pack] => 10
        [quantity] => 20
        [volume] => 30
        [units] => 7
        [amount] => 40
        [rebate_start_date] => 2014-05-01
        [rebate_expiry_date] => 2014-05-31
        [rebate_total_count] => 5000
        [applicable_states] => Array 
                (
                 [0] => 3
                 [1] => 4
                 [2] => 10
                 [3] => 15
                 [4] => 17
                )   
        [product_id_1] => Array
                (
                    [1] => 10
                    [2] => 9
                )
        )

    [2] => Array
      (
        [pack] => 50
        [quantity] => 60
        [volume] => 70  
        [units] => 12
        [amount] => 80    
        [rebate_start_date] => 2014-06-01
        [rebate_expiry_date] => 2014-06-30
        [rebate_total_count] => 10000
        [applicable_states] => Array 
          (
            [0] => 44
            [1] => 45
            [2] => 47
            [3] => 49
            [4] => 50
          )
        [product_id_2] => Array
          (
            [1] => 11
            [2] => 8
          )
      )

      [multiselect] => 50
)

在上面的数组中,您可以观察到匹配索引的所有数据都在同一个键下。我还想告诉你一件事,[applicable_states] 和 [rebate_total_count] 键可能包含空白值。在操作数组$_POST 时也应该考虑这一点,以便生成包含上述一个键下相同索引的所有数据的数组。如何通过在 PHP 中使用现成的数组函数和一些神奇的逻辑以最佳方式实现这一点?谢谢。

【问题讨论】:

  • 一些地图和过滤。你尝试了什么? Cos SO 不是代码生成器
  • [pack] 与 [product_id_1] 有什么关系?

标签: php arrays multidimensional-array associative-array key-value


【解决方案1】:
$new_array = array();
foreach ($_POST as $key => $val) {
    if (!is_array($val)) {
        $new_array[$key] = $val;
    } elseif (preg_match('/^product_id_(\d+)$/', $key, $match)) {
        $i = $match[1];
        if (isset($new_array[$i])) {
            $new_array[$i][$key] = $val;
        } else {
            $new_array[$i] = array($key => $val);
        }
    } else {
        foreach ($val as $i => $subval) {
            if (isset($new_array[$i])) {
                $new_array[$i][$key] = $subval;
            } else {
                $new_array[$i] = array($key => $subval);
            }
        }
    }
}

【讨论】:

  • 首先非常感谢您的帮助。我试过你的代码。它给了我几乎与我想要的一样的东西,但它只有输出中的小错误。键 [product_id_1] 和 [product_id_2] 下的元素未正确打印。如果你愿意,我可以向你展示生成的数组。我应该将生成的数组附加到问题正文吗?
  • 为什么product_id_N 的处理方式与所有其他数组不同?
  • 这是为了避免同名的HTML元素。
  • 你应该澄清这个问题,说这些条目不遵循相同的规则,即所有具有匹配索引的条目都在同一个键下。
  • 感谢您的建议。从现在开始,我会一直牢记在心。
猜你喜欢
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2021-08-19
  • 2018-10-15
  • 2020-11-23
  • 2018-06-16
  • 2011-12-02
相关资源
最近更新 更多