2010-12-05 22 views
0

當前陣列輸出:可以使用哪個php函數或函數組合來更新數組以獲得下面的disired輸出?

[0] => Array 
    (
     [id] => 165  <-- first occurrence 
     [score] => 3.813 <-- first value 
    ) 

[1] => Array 
    (
     [id] => 167 
     [score] => 3.772 
    ) 

[2] => Array 
    (
     [id] => 165 <-- second 
     [score] => 4.421 <-- second value 
    ) 

後一些PHP函數期望更新陣列的輸出:

[0] => Array 
    (
     [id] => 165  <-- update this key 
     [score] => 8.234 <-- with $ary[0][score] + $ary[2][score] 
    ) 

[1] => Array 
    (
     [id] => 167 
     [score] => 3.772 
    ) 

由於ID密鑰更新,我們不需要$ary[2][id]$ary[2][score],因此將其刪除。

有沒有神奇的功能?或者我們是否應該編寫一個特殊功能來實現這一點? 謝謝!

+0

您可能需要寫一個特殊的功能。 – 2010-12-05 23:00:51

+0

您可以使用`unset($ ary [2])`將其刪除。 – Ben 2010-12-05 23:02:14

回答

3

對於那些TOTS了所有的共享相同id值記錄的通用功能:

(注:可能不是地道的PHP,但它的工作)

function totup($a) { 

    // create temporary array keyed on ID, containining sum of scores 
    $tmp = array(); 
    foreach ($a as $row) { 
     $id = $row['id']; 
     $score = $row['score']; 
     $tmp[$id] += $score; 
    } 

    // then convert that array back to (id, score) tuples 
    $res = array(); 
    foreach ($tmp as $id => $score) { 
     $res[] = array(id => $id, score => $score); 
    } 
    return $res; 
} 

測試運行:

$tmp = array(
    array(id => 165, score => 3.813), 
    array(id => 167, score => 3.772), 
    array(id => 165, score => 4.421)); 

$foo = totup($tmp); 
print_r($foo); 

Array 
(
    [0] => Array 
     (
      [id] => 165 
      [score] => 8.234 
     ) 

    [1] => Array 
     (
      [id] => 167 
      [score] => 3.772 
     ) 

) 
0

$ary[0][score] += $ary[2][score];
unset(yourArray[2]);

相關問題