Intereting Posts
Перенаправить исходные файлы .gif на страницу обработчика через .htacces PHP dom для получения класса тега с несколькими именами класса css php – как открыть окно печати, когда файл pdf открывается на веб-странице? Как отключить магические кавычки в файле конфигурации PHP? Я использую XAMPP Почему IE7 отклоняет файлы cookie сеанса со страницы в кадре? Хотя я отлаживаю PHP Script в Eclipse, он не загружает расширение mysql Генерация метатекстов Facebook Open Graph динамически Найти разницу в месяц в php? PHP Include на основе REQUEST_URI Получить корневой узел XML-документа с помощью simplexml Как обнаружить повторяющиеся значения в массиве PHP? Не удалось отправить электронную почту powershell, используя php-скрипт для Outlook, используя iis windows server 2012 Арифметика времени PHP Fullcalendar. привязка к базе данных Есть ли директива php.ini, которая позволяет отслеживать трассировки стека на ошибках?

Многомерный массив Найти и обновить значение с помощью PHP

Я не могу получить подходящий заголовок для этой темы (помогите мне). Я не могу описать эту проблему, так вот пример моей проблемы.

Мой массив:

Array ( [0] => Array ( [answer] => a [score] => 3 ) [1] => Array ([answer] => b [score] => 4 ) [2] => Array ( [answer] => h [score] => 3) [3] => Array ( [answer] => a [score] => 4 )) ... 

И я хочу получить результат следующим образом:

 Array ( [0] => Array ( [answer] => a [score] => 7 ) [1] => Array ([answer] => b [score] => 4 ) [2] => Array ( [answer] => h [score] => 3)) ... 

Вы можете увидеть смену подзаголовка в индексном ключе 0. Это происходит потому, что в ответном подразделении есть два значения «a» из индексного ключа 0 и 3. Оценка сменилась на 7 из-за суммы обоих (3 + 4) , На самом деле у меня нет идеи для этого, извините за мой английский и спасибо за помощь. Не стесняйтесь комментировать. 🙂

 $merged = array(); foreach ($array as $answer) { if (isset($merged[$answer['answer']])) { $merged[$answer['answer']]['score'] += $answer['score']; } else { $merged[$answer['answer']] = $answer; } } var_dump($merged); 

Проверьте этот ответ, не используя цикл:

 $arr = array ( array ( 'answer' => 'a', 'score' => 3 ), array ( 'answer' => 'b', 'score' => 4 ), array ( 'answer' => 'h', 'score' => 3), array ( 'answer' => 'a', 'score' => 4 )); $t = array_reduce($arr, function($result, $item) { if(array_key_exists($item['answer'],$result)){ $result[$item['answer']] = array('answer' => $item['answer'], 'score' => $item['score']+$result[$item['answer']]['score']); } else{ $result[$item['answer']] = array('answer' => $item['answer'], 'score' => $item['score']); } return $result; },array()); echo "<pre>"; print_r($t); 

Вывод :

 Array ( [a] => Array ( [answer] => a [score] => 7 ) [b] => Array ( [answer] => b [score] => 4 ) [h] => Array ( [answer] => h [score] => 3 ) ) 

Я использую временный массив:

 /* Current array */ $array = array( array("answer" => "a", "score" => 3), array("answer" => "b", "score" => 4), array("answer" => "h", "score" => 3), array("answer" => "a", "score" => 4) ); /* Using a temporary array */ $tmp_array = array(); foreach($array as $subarray){ if(array_key_exists($subarray["answer"], $tmp_array)){ $tmp_array[$subarray["answer"]] += $subarray["score"]; }else{ $tmp_array[$subarray["answer"]] = $subarray["score"]; } } /* Creating a new formatted array */ $new_array = array(); foreach($tmp_array as $key => $value){ $new_array[] = array("answer" => $key, "score" => $value); } print_r($new_array);