2014-02-26 33 views
1

我有一個關聯數組$result表示創建一些conditon PHP一系列獨特

$result[0]['id']=120 
$result[0]['point']=3.4 
$result[1]['id']=136 
$result[1]['point']=4.5 
$result[2]['id']=140 
$result[2]['point']=5.6 
$result[3]['id']=120 
$result[3]['point']=6.7 

我想使這個陣列由id唯一的,但是在一個條件是獨特的數組包含具有較高元素point。 對於上面的例子,我想輸出是

$result[0]['id']=136 
$result[0]['point']=4.5 
$result[1]['id']=140 
$result[1]['point']=5.6 
$result[2]['id']=120 
$result[2]['point']=6.7 

我嘗試下面的代碼只會使獨特的陣列由id,但不能檢查的條件。

function super_unique($array, $key) { 
    $temp_array = array(); 
     foreach($array as & $v) { 
      if (!isset($temp_array[$v[$key]])) 
      $temp_array[$v[$key]] = & $v; 
     } 
    $array = array_values($temp_array); 
    return $array; 
} 

請幫助在此先感謝

回答

0
$newarr = array(); 
foreach($array as $v) { 
    if (!isset($newarr[$v['id']]) || ($newarr[$v['id']] < $v['point'])) { 
     $newarr[$v['id']] = $v['point']; 
    } 
} 

一般提示:你是在foreach循環中不要使用引用。雖然這不是特定代碼片段的問題,但foreach循環中引用的變量可能會導致代碼中很難找到的錯誤,其中稍後將在稍後的代碼中重新使用該特定變量名稱。

+0

我應該用這上面的函數 – user3357227

0
$test = super_unique($result); 
var_dump($test); 


function super_unique($array){ 
    $newArray = array();  
    foreach($array as $val){ 
     $id = $val["id"]; 
     $point = $val["point"]; 
     if(!isset($newArray["$id"]) || ($point > $newArray["$id"])){ 
      $newArray["$id"] = $point; 
     } 
    } 
    //asort($newArray); want to sorting by point??? 
    $output = array(); 
    $i = 0; 
    foreach($newArray as $key => $value){ 
     $output[$i]["id"] = $key; 
     $output[$i]["point"]=$value; 
     $i++; 
    } 
    return $output; 
} 
+0

但是,這是行不通的,如果..what我多了一個元素命名爲$結果[「分數」]爲每個陣列 – user3357227