【问题标题】:Restructure multidimensional array based on associative array key基于关联数组键重构多维数组
【发布时间】:2021-10-08 19:18:12
【问题描述】:

我有以下数组:

$products = [
  [
    'id' => 21,
    'name' => 'Floral Dress',
    'params' => [
      'size' => 14,
      'price' => 23.99,
      'department' => 'Dresses'
    ]
  ],
  [
    'id' => 413,
    'name' => 'Maxi Skirt',
    'params' => [
      'size' => 10,
      'price' => 12.99,
      'department' => 'Skirts'
    ]
  ],
  [
    'id' => 78,
    'name' => 'A Line Prom Dress',
    'params' => [
      'size' => 10,
      'price' => 79.99,
      'department' => 'Dresses'
    ]
  ],
  [
    'id' => 212,
    'name' => 'Nude Block High Heels',
    'params' => [
      'size' => 6,
      'price' => 20.99,
      'department' => 'Shoes'
    ]
  ],
  [
    'id' => 54,
    'name' => 'Denim Trim Dress',
    'params' => [
      'size' => 8,
      'price' => 52.99,
      'department' => 'Dresses'
    ]
  ],
];

很遗憾,我无法控制数组的构建方式。

相反,我需要重组数据,以便数组按['params']['department'] 键排序。

所以理想情况下,我会采用上述内容并像这样输出:

$products = [
  'Dresses' => [
    [
      'id' => 21,
      'name' => 'Floral Dress',
      'params' => [
        'size' => 14,
        'price' => 23.99
      ]
    ],
    [
      'id' => 78,
      'name' => 'A Line Prom Dress',
      'params' => [
        'size' => 10,
        'price' => 79.99
      ]
    ],
    [
      'id' => 54,
      'name' => 'Denim Trim Dress',
      'params' => [
        'size' => 8,
        'price' => 52.99
      ]
    ],
  ],
  'Skirts' => [
    [
      'id' => 413,
      'name' => 'Maxi Skirt',
      'params' => [
        'size' => 10,
        'price' => 12.99
      ]
    ],
  ],
  'Shoes' => [
    [
      'id' => 212,
      'name' => 'Nude Block High Heels',
      'params' => [
        'size' => 6,
        'price' => 20.99
      ]
    ],
  ]

【问题讨论】:

    标签: php arrays multidimensional-array associative-array


    【解决方案1】:
    $groupedProducts = [];
    foreach ($products as &$product) {
       $department = $product['params']['department'];
       unset($product['params']['department']);
       $groupedProducts[$department] = $product;
    }
    
    var_dump($groupedProducts);
    

    【讨论】:

      【解决方案2】:

      您可以简单地遍历所有产品并填充一个包含部门的新关联数组,这些部门本身就是相应产品的数组。请参阅下面代码中的 cmets。

      <?php
      // same data as in the question, just in one line for better overview
      $products = [['id' => 21,'name' => 'Floral Dress','params' => ['size' => 14,'price' => 23.99,'department' => 'Dresses']],['id' => 413,'name' => 'Maxi Skirt','params' => ['size' => 10,'price' => 12.99,'department' => 'Skirts']],['id' => 78,'name' => 'A Line Prom Dress','params' => ['size' => 10,'price' => 79.99,'department' => 'Dresses']],['id' => 212,'name' => 'Nude Block High Heels','params' => ['size' => 6,'price' => 20.99,'department' => 'Shoes']],['id' => 54,'name' => 'Denim Trim Dress','params' => ['size' => 8,'price' => 52.99,'department' => 'Dresses']]];
      
      // initialize empty department array
      $departments = array();
      
      // iterate over all the products
      foreach ( $products as $product ) {
          // get this product's department
          $product_department = $product['params']['department'];
          // unset the department in the params array
          unset( $product['params']['department'] );
      
          // initialize this department as an empty array
          // if it doesn't exist yet
          if ( !isset( $departments[$product_department] ) ) {
              $departments[$product_department] = array();
          }
          
          // push this product in its corresponding department
          $departments[$product_department][] = $product;
      }
      
      var_dump( $departments );
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 2013-01-25
        相关资源
        最近更新 更多