Я не могу получить подходящий заголовок для этой темы (помогите мне). Я не могу описать эту проблему, так вот пример моей проблемы.
Мой массив:
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);