1

我有一个关联数组$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;
}

请帮助提前谢谢

4

2 回答 2

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

一般提示:不要像在 foreach 循环中那样使用引用。虽然这与这个特定的代码片段无关,但 foreach 循环中的引用变量可能会导致代码中非常难以发现的错误,即该特定变量名称稍后会在以后的代码中重复使用。

于 2014-02-26T19:02:45.793 回答
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;
}
于 2014-02-26T19:23:02.380 回答