В соответствии со значениями в ключе массива в переполнении стека

У меня есть несколько массивов, как это:

$value1 = array ("10" => "car", "20" => "home", "30" => "ball");
$value2 = array ("50" => "car", "60" => "home", "70" => "ball");
$value3 = array ("100" => "car", "110" => "home", "120" => "ball");

Теперь я хочу объединить эти массивы по значению и при объединении добавить ключевые значения вместе.

Псевдокод:

$endvalue = $value1 + $value2 + $value3;

print_r ($endvalue);

Ожидаемый результат:

"160" => "car""190" => "home""220" => "ball"

У меня есть такая база данных;

имя facebookCount tweetCount googleCount

машина 20 50 100
дом 50 60 10
мяч 30 10 70

.. и я хочу найти наиболее общую ценность ..

Подобно;

автомобиль (20 + 50 + 100)

дом (50+ 60 + 10)

мяч (30 + 10 + 70)

..и список

машина> дом> мяч

Вы можете мне помочь ?

2

Решение

Решение для входных массивов с неповторяющиеся ключи с помощью array_values, array_combine а также array_search функции:

...
$arrList = [$value1, $value2, $value3];  // wrapping input arrays with outer array
$names = array_combine(array_values($value1), array_fill(0, count($arrList), 0));  // getting base names list

foreach ($names as $k => &$num) {
foreach ($arrList as $arr) {
$num += (int) array_search($k, $arr);
}
}

print_r($names);

Я считаю, что окончательный массив должен быть ассоциативным массивом, потому что могут быть случаи, когда общие суммы будут одинаковыми среди сгруппированных имен

Выход:

Array
(
[car] => 160
[home] => 190
[ball] => 220
)
2

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

Решение SQL, вероятно, будет быстрее в вашем случае, и на самом деле это очень просто. Простая арифметика не является проблемой для SQL.

Рассмотрим таблицу со следующей структурой:

CREATE TABLE `social` (
`name` varchar (50) NOT NULL,
`facebook` int (11) NOT NULL,
`twitter` int (11) NOT NULL,
`google` int (11) NOT NULL,
ПЕРВИЧНЫЙ КЛЮЧ (`name`)
);

Тогда этот запрос:

SELECT name, (facebook + twitter + google) as shares FROM social
ORDER BY shares DESC

Дает вам следующий результат:

именные акции
автомобиль 170
дом 120
мяч 110

Думаю, не так много, чтобы объяснить, но не стесняйтесь спрашивать, если что-то неясно.

2