PHP - преобразование массива в группу дубликатов вместе - phpspreadsheet - PullRequest
0 голосов
/ 13 июня 2018

У меня есть загрузчик 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
    }
  }
}

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 13 июня 2018

Итак, короче говоря, я был настолько захвачен этим, что полностью упустил очевидное.Чтобы решить эту проблему, я взял исходный массив из phpspreadsheet и выполнил array_multisort:

foreach ($rows as $key => $row) {
  $postcodes[$key] = $row[7]; //the postcode key
}
array_multisort($postcodes, SORT_DESC, $rows;

Затем я просто пробежался по массиву, и если почтовый индекс изменился, я бы создал новый массив,в противном случае я бы просто вставил правильный набор продуктов.

Я чувствую себя действительно глупо, я не думал об этом раньше.Спасибо @apokryfos за попытку помочь!

...