2013-03-26 4 views
2

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

+0

ли массив из базы данных? – Cups

+0

nope, определенный мной – andrefadila

ответ

3
$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); 
+0

спасибо мастер, приятно, что это просто. мой разум уже взорван – andrefadila

0

Я хотя использование временного массива:

/* 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); 
+1

спасибо за ответ. :) – andrefadila

+0

@andrefadila добро пожаловать: p – HamZa

1

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

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

) 
+0

yap спасибо. :) – andrefadila

 Смежные вопросы

  • Нет связанных вопросов^_^