首页 > 解决方案 > 基于相似数组键创建数组批处理

问题描述

我正在尝试根据数组的第一个键创建一批类似的数组。

这是输入数组

$headers          = array(
    0 => 'order_number',
    1 => 'product_sku',
);

$input_array = array (
  0 => 
  array (
    0 => '311000000706',
    1 => 'S503053'
  ),
  1 => 
  array (
    0 => '311000000706',
    1 => 'S516135'
  ),
  2 => 
  array (
    0 => '311000000703',
    1 => 'S526587'
  ),
  3 => 
  array (
    0 => '311000000703',
    1 => 'S526587'
  ),
);

我正在尝试创建一个单独的数组,如果它具有相同的订单 ID,例如两个数组具有相同的订单 ID =“311000000706”,那么所需的输出将是

$desired_output = array (
  0 => 
  array (
    0 => '311000000706',
    1 => 'S503053'
  ),
  1 => 
  array (
    0 => '311000000706',
    1 => 'S516135'
  ));

这是我尝试过的

$prev_order_id_s = null;
    $similar_order_ids = array();
      foreach ($input_array as $key => $level):
        if ($level['0'] == $prev_order_id_s) {
            $similar_order_ids[][] = $level;
        }
        $prev_order_id_s = $level['0'];
    endforeach;

但我没有得到想要的输出,我需要一些建议。你能就此提出一些逻辑吗?

这是带有上述代码的编译器 - paiza.io/projects/fB-8CfiEuTX1cJXnXAZS3g

标签: phparrays

解决方案


我宁愿建议您利用订单 ID 作为关联键,并在找到匹配的订单 ID 时继续向其中添加行,而不是维护先前订单 ID 的变量。最后,您可以array_values()在收集的数据上删除订单 ID 作为键。

<?php

$set = [];
foreach($input_array as $row){
    $set[$row[0]][] = $row;
}

$result = array_values($set);
print_r($result);

推荐阅读