2016-06-25 3 views
2

У меня есть несколько массивов, как это:Согласно значениям в пределах ключевого значения массива в PHP

$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" 

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

 
name facebookCount tweetCount googleCount 

car 20    50   100 
home 50    60   10 
ball 30    10   70 

.. и я хочу, чтобы найти наиболее общее значение ..

Как;

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

дома (50+ 60 + 10)

мяч (30 + 10 + 70)

..и список

автомобиль> home> ball

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

+1

И что вы будете делать, когда получите два дубликата ключа? Вы не можете дублировать ключи. – Rizier123

+0

У меня есть база данных; имя - facebookcount - tweetcount - googlecount автомобиля 20 50 100 дом 50 60 10 дома 30 10 70 ..и я хочу узнать в общей сложности до количества имен – serhatgksu

+2

PHP не может иметь дубликаты ключей в массиве. Поэтому вам нужно подумать о том, что вы хотите сделать, когда это произойдет. – Rizier123

ответ

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 
) 
+0

большое вам спасибо. Это работает для меня. – serhatgksu

+0

Но вы столкнетесь с проблемами, когда подсчеты одинаковы для facebook и twitter. – trincot

+0

@ trincot, что вы имеете в виду? – RomanPerekhrest

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, 
    PRIMARY KEY (`name`) 
); 

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

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

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

 
name shares 
car  170 
home 120 
ball 110 

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

+0

Спасибо за ваши ответы. – serhatgksu