Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-将数组转换为将重复项组合在一起-PHPSReadSheet_Php_Arrays_Sorting_Phpspreadsheet - Fatal编程技术网

PHP-将数组转换为将重复项组合在一起-PHPSReadSheet

PHP-将数组转换为将重复项组合在一起-PHPSReadSheet,php,arrays,sorting,phpspreadsheet,Php,Arrays,Sorting,Phpspreadsheet,我有一个csv上传程序,我正在创建一个订单api。使用phpSpreadsheetstoArray方法,我得到了如下数组: Array ( [0] => Array ( [0] => product_sku [1] => product_qty [2] => shipping_name [3] => shipping_address1 [4] => shipping

我有一个csv上传程序,我正在创建一个订单api。使用phpSpreadsheets
toArray
方法,我得到了如下数组:

Array
(
  [0] => Array
      (
        [0] => product_sku
        [1] => product_qty
        [2] => shipping_name
        [3] => shipping_address1
        [4] => shipping_address2
        [5] => shipping_city
        [6] => shipping_county
        [7] => shipping_postcode
        [8] => shipping_type
        [9] => customer_id
      )
  [1] => Array
      (
        [0] => test_sku_1
        [1] => 3
        [2] => Bruce Wayne
        [3] => The Manor
        [4] => Near Arkahm Asylumn
        [5] => Gotham
        [6] => Greater Gothan
        [7] => B17MAN
        [8] => 1
        [9] => 14994333
      )
  [2] => Array
      (
        [0] => test_sku_2
        [1] => 2
        [2] => Bruce Wayne
        [3] => The Manor
        [4] => Near Arkahm Asylumn
        [5] => Gotham
        [6] => Greater Gothan
        [7] => B17MAN
        [8] => 1
        [9] => 14994333
      )

  [3] => Array
      (
        [0] => test_sku_3
        [1] => 7
        [2] => Bruce Wayne
        [3] => The Manor
        [4] => Near Arkahm Asylumn
        [5] => Gotham
        [6] => Greater Gothan
        [7] => L17MA2
        [8] => 1
        [9] => 14994333
      )
)
每个订单将在一个新行上,但是如果客户订购两个不同的项目,我需要使用他们的邮政编码将它们分组在一起。因此,我的目标是重新设置为这种格式:

[orders] => Array(
  Array(

    [shipping_name] => "Bruce wayne",
    [customer_id] => 14994333,
    [address] => Array(
      [shipping_address1] => "The Manor",
      [shipping_address2] => "Near Arham Asylumn",
      [shipping_city] => "Gotham",
      [shipping_county] => "Greater Gotham",
      [shipping_postcode] => "B17MAN",
    )
    [products] => Array(
      Array(
        [sku] => "test_sku_1",
        [quantity] => 3
      ),
      Array(
        [sku] => "test_sku_2",
        [quantity] => "2"
      )
    ) 
  )
)
我遇到的第一个问题是试图匹配邮政编码。我通过以下方式获得了一个计数:

$getDuplicates = array_count_values(array_map(function($duplicates) {
       return $duplicates[7]; //Where 7 is the postcode
}, $rows));
这在正确计算我需要什么方面起了作用。然而,从那里我碰到了一堵砖墙。如果我在计算重复的行数,我需要它同时记下已经经过的行数,这样它们就不会被错误地推到我想要创建的新数组中

它应该是:

for each rows as row{
  if row isn't set to be ignored{
    for each count of this postcode{
      array_push the product sku and qty
      mark these rows as rows to be ignored
    }
  }
}

有人能帮我吗

因此,长话短说,我被这件事缠住了,完全忽略了显而易见的事情。为了解决这个问题,我从phpspreadsheet获取了原始数组,并执行了一个
数组\u multisort

foreach ($rows as $key => $row) {
  $postcodes[$key] = $row[7]; //the postcode key
}
array_multisort($postcodes, SORT_DESC, $rows;
然后,我只是通过数组进行处理,如果邮政编码发生了变化,我会创建一个新数组,否则我只会直接插入产品的正确数组


我觉得自己真的很蠢,我以前没想到这一点。感谢@apokryfos的帮助

所以基本上你需要根据客户id和邮政编码进行分组?不,上传程序本身将用于dropshipping。此csv的每一行中的客户id都是相同的,因此当推送到api时,它知道将订单放在哪个帐户下。