Создать новый массив с использованием 2 разных массивов в php
У меня есть 2 массива, как это. Array1:
Array
(
[abu-garcia] => 1
[daiwa] => 4
[shimano] => 4
)
Array 2:
Array
(
[0] => Array
(
[brand_id] => 36
[brand_name] => Abu Garcia
[brand_slug] => abu-garcia
)
[1] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
)
[2] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
)
[3] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
)
[4] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
)
[5] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
)
[6] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
)
[7] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
)
Я хочу создать новый массив, который должен выглядеть следующим образом:
Array
(
[0] => Array
(
[brand_id] => 36
[brand_name] => Abu Garcia
[brand_slug] => abu-garcia
[count] => 1
)
[1] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
[count] => 4
)
[2] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
[count] => 4
)
[3] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
[count] => 4
)
[4] => Array
(
[brand_id] => 41
[brand_name] => Daiwa
[brand_slug] => daiwa
[count] => 4
)
[5] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
[count] => 4
)
[6] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
[count] => 4
)
[7] => Array
(
[brand_id] => 39
[brand_name] => Shimano
[brand_slug] => shimano
[count] => 4
)
Оба там массива создаются WordPress. array1 - это выходной сигнал функции, когда проверяется количество товаров в марке cat, а другой массив предоставляет информацию о марках. Спасибо
4 ответа
Я думаю, я понимаю, что вы пытаетесь сделать...
Если это примеры ваших массивов:
$CountArray = array("abu-garcia"=>1,
"daiwa"=>4,
"shimano"=>4);
$DataArray = array(
array("brand_id"=>36, "brand_name"=>"Abu Garcia", "brand_slug"=>"abu-garcia"),
array("brand_id"=>41, "brand_name"=>"Daiwa", "brand_slug"=>"daiwa"),
array("brand_id"=>39, "brand_name"=>"Shimano", "brand_slug"=>"shimano")
);
Затем переберите второй массив для создания нового массива и добавьте count
ключ из первого массива, как это:
$i = 0;
foreach($DataArray as $ItemArray){
foreach($ItemArray as $Key=>$Value){
$NewArray[$i][$Key] = $Value;
$NewArray[$i]['count'] = 0;
if(isset($CountArray[$ItemArray['brand_slug']])){
$NewArray[$i]['count'] = $CountArray[$ItemArray['brand_slug']];
}
}
ksort($NewArray[$i]);
$i++;
}
print_r($NewArray);
Проще всего это можно сделать так. Предположим, ваше первое имя массива - $first_array, а второе - $second_array.
просто зациклите второй как
foreach($second_array as $index => $item)
{
$second_array[$index]['count'] = $first_array[$item['brand_slug']];
}
echo "<pre>";
print_r($second_array);
Задача добавления нового столбца ко всем строкам в 2d-массиве на основе массива ассоциативного поиска/отображения наиболее элегантно выполняется с помощьюarray_map()
и оператор объединения массивов (+
).
Код: (Демо)
var_export(
array_map(
fn($row) => $row + ['count' => $countArray[$row['brand_slug']]],
$dataArray
)
);
Также нет ничего плохого в изменении массива данных по ссылке в классическом методе.foreach()
петля . (Демо)
foreach ($dataArray as &$row) {
$row['count'] = $countArray[$row['brand_slug']];
}
var_export($dataArray);
В качестве соображения, не представленного в образце данных задавшего вопрос, если значение строки не найдено в массиве сопоставления, используйте оператор объединения нулей для возврата к значению по умолчанию.
['count' => $countArray[$row['brand_slug']] ?? $someDefault]
Или
$row['count'] = $countArray[$row['brand_slug']] ?? $someDefault;
array_merge Объединяет элементы одного или нескольких массивов вместе, так что значения одного добавляются в конец предыдущего. Возвращает результирующий массив.
Пример #array_merge() пример
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>