У меня есть несколько массивов, как это:
$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)
..и список
машина> дом> мяч
Вы можете мне помочь ?
Решение для входных массивов с неповторяющиеся ключи с помощью 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
)
Решение 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
Думаю, не так много, чтобы объяснить, но не стесняйтесь спрашивать, если что-то неясно.