我有一个以
表示的关联数组$result
$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 :(得分:0)
$newarr = array();
foreach($array as $v) {
if (!isset($newarr[$v['id']]) || ($newarr[$v['id']] < $v['point'])) {
$newarr[$v['id']] = $v['point'];
}
}
一般提示:不要像使用foreach循环那样使用引用。虽然这个特定的代码片段不是一个问题,但foreach循环中引用的变量可能会导致代码中非常难以发现的错误,以后在以后的代码中重用特定的变量名称。
答案 1 :(得分: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;
}