Отдельные массивы в ассоциативный массив в 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);