在PHP的某些条件下创建一个唯一的数组

时间:2014-02-26 18:39:02

标签: php arrays array-unique

我有一个以

表示的关联数组$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;
}

请提前帮助

2 个答案:

答案 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;
}