Отдельные массивы в ассоциативный массив в php codeigniter (объединение массивов)

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

$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 ответ

Решение

Вы можете сделать это, перебрав ваши входные массивы и напрямую поместив элемент [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);
Другие вопросы по тегам