#php #mysql #arrays
#php #mysql #массивы
Вопрос:
Вот еще один PHP для всех вас!
У меня есть два массива, исходящих из двух таблиц, которые имеют одинаковые названия столбцов, но разные значения. Я создал запрос, который вызывает обе таблицы для выгрузки данных в массивы. Значения, которые я получаю, являются: —
Array {
[0] {
[id] => 23,
[count] => 300
},
[1] {
[id] => 43,
[count] => 400
}
}
и
Array {
[0] {
[id] => 43,
[count] => 200
},
[1] {
[id] => 78,
[count] => 55
}
}
Что я хочу сделать, так это: —
Array {
[0] {
[id] => 23,
[count] => 300
},
[1] {
[id] => 43,
[count] => 600 <---- Notice how this has been added together
},
[2] {
[id] => 78,
[count] => 55
}
}
Как бы я это сделал?
Комментарии:
1. и что же вы пробовали до сих пор?
2. Просто обычные array_merge и array_push
3. отлично, добавьте код … так будет легче сказать вам, что не так
Ответ №1:
array_merge на первый взгляд может показаться хорошим вариантом, но на самом деле это не так, поскольку он не объединяет цифровые клавиши, а просто добавляет их.
Проще всего было бы написать свою собственную функцию для этого слияния.
Будет выглядеть примерно так:
function merge_array($first, $second)
{
$result = array();
append_array($result, $first);
append_array($result, $second);
return $result;
}
function append_array(amp;$result, $array)
{
foreach($array as $entry){
$index = get_element_index($result, $entry);
if($index < 0){
// Add as normal
$result[] = $entry;
}else{
$result[$index]['count'] = $result[$index]['count'] $entry['count'];
}
}
}
function get_element_index($array, $element)
{
for($i = 0; $i < count($array); $i ){
if($entry['id'] == $element['id']){
return $i;
}
}
return -1;
}