Как суммировать одинаковые значения полей в многомерном массиве

Я должен признать, что понимание таблиц — большая проблема для меня, поэтому, пожалуйста, не судите меня так сильно …

Это мой массив:

Array
(
[names] => Array
(
[0] => Name1
[1] => Name2
[2] => Name1
)

[ids] => Array
(
[0] => 1
[1] => 2
[2] => 1
)

[quantities] => Array
(
[0] => 255
[1] => 2
[2] => 467
)

)

И я хочу подвести итогquantities» где names или же ids подобные.

Пример вывода должен быть:

Array
(
[names] => Array
(
[0] => Name1
[1] => Name2
)

[ids] => Array
(
[0] => 1
[1] => 2
)

[quantities] => Array
(
[0] => 722
[1] => 2
)

)

Я знаю, что есть такая функция, как «array_reduce«но не знаю, как его использовать.

Спасибо за помощь!

1

Решение

попробуй это

    $result = [];
foreach($array['ids'] as $key=>$val ){

if(array_key_exists($val, $result)){

$result[$val]['sum_quantity'] += $array['quantities'][$key];
}
else{
$result[$val]['sum_quantity'] = $array['quantities'][$key];
$result[$val]['name'] = $array['names'][$key];
$result[$val]['id'] = $array['ids'][$key];
}
}

и вывод будет таким

    Array
(
[1] => Array //array key = id
(
['name'] => Name1,
['sum_quantity'] => 722,
['id'] => 1
)

[2] => Array
(
['name'] => Name2,
['sum_quantity'] => 2,
['id'] => 2
)
)
1

Другие решения

Вы можете сделать это так:

    $testArray['names'][0]='name1';
$testArray['names'][1]='name2';
$testArray['names'][2]='name1';

$testArray['ids'][0]=1;
$testArray['ids'][1]=2;
$testArray['ids'][2]=1;

$testArray['quantities'][0]=255;
$testArray['quantities'][1]=2;
$testArray['quantities'][2]=467;

echo "<pre>";

print_r($testArray);

$unqArray['names']=array();
$unqArray['ids']=array();
$unqArray['quantities']=array();

foreach($testArray['ids'] as $key=>$value)
{
if(!in_array($value,$unqArray['ids']))
{
$unqArray['names'][]=$testArray['names'][$key];
$unqArray['ids'][]=$testArray['ids'][$key];
$quantity=0;
foreach($testArray['ids'] as $keyId=>$valueId)
{
if($valueId==$value)
{
$quantity+=$testArray['quantities'][$keyId];
}
}
$unqArray['quantities'][]=$quantity;
}
}

print_r($unqArray);

echo "</pre>";
0

По вопросам рекламы [email protected]