PHP-将数组转换为将重复项组合在一起-PHPSReadSheet
我有一个csv上传程序,我正在创建一个订单api。使用phpSpreadsheetsPHP-将数组转换为将重复项组合在一起-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
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时,它知道将订单放在哪个帐户下。