Одиночные массивы в ассоциативный массив в php codeigniter (Combine Arrays) - PullRequest
0 голосов
/ 06 ноября 2019

у меня есть два массива: -

$a1=array(1,1,2,3,1);<br>
$a2=array("m","m","s","xl","s");

я хочу это как вывод, что я должен делать: -

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => m
            [2] => 2 //this is count of m
        )
    [1] => Array
        (
            [0] => 1
            [1] => s
            [2] => 1 //this is count of s
        )
    [2] => Array
        (
            [0] => 2
            [1] => s
            [2] => 1 //this is count of s
        )
    [3] => Array
        (
            [0] => 3
            [1] => xl
            [2] => 1 //this is count of xl
        )
)

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете сделать это, зацикливая свои входные массивы и непосредственно помещая элемент [1, m, 1] в массив результатов на основе первого набора значений ($a1[0] и $a1[0]). Затем в следующем раунде вам нужно будет проверить, содержит ли ваш результирующий массив элемент с текущим идентификатором и размером продукта - если это так, вы увеличиваете счетчик там, если нет, вам нужно создать новый элемент. Но проверять, существует ли такой элемент, будет немного больно, потому что для этого вам придется каждый раз повторять все существующие элементы снова.

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

$a1=array(1,1,2,3,1);
$a2=array("m","m","s","xl","s");

$temp = [];
foreach($a1 as $index => $product_id) {
  $size = $a2[$index];
  // if an entry for given product id and size combination already exists, then the current
  // counter value is incremented by 1; otherwise it gets initialized with 1
  $temp[$product_id][$size] = isset($temp[$product_id][$size]) ? $temp[$product_id][$size]+1 : 1;
}

Это дает массив $ temp следующего вида:

array (size=3)
  1 => 
    array (size=2)
      'm' => int 2
      's' => int 1
  2 => 
    array (size=1)
      's' => int 1
  3 => 
    array (size=1)
      'xl' => int 1

Вы видите, что идентификатор продукта - это ключ на верхнем уровне, затем размер - ключ на втором уровне, а значение на втором уровне - это счетчик для этой комбинации идентификатора продукта и размера.

Теперьмы преобразуем это в желаемую структуру результата:

$result = [];
foreach($temp as $product_id => $size_data) {
  foreach($size_data as $size => $count) {
    $result[] = [$product_id, $size, $count];
  }
}
var_dump($result);
...