2013-03-26 36 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得分子項的變化這是發生在索引關鍵字0和3的回答子鍵中的值「a」。由於(3 + 4)的總和,得分改變爲7。真的,我沒有這個想法,對不起我的英語,謝謝你的幫助。 隨時發表評論。 :)

+0

是數組源自數據庫? – Cups 2013-03-26 08:20:19

+0

nope,由我自己定義 – andrefadila 2013-03-26 09:12:30

回答

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 2013-03-26 08:48:38

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 2013-03-26 09:11:33

+0

@andrefadila不客氣:p – HamZa 2013-03-26 09:13:27

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 2013-03-26 09:11:00