【问题标题】:Creating a unique array on some conditon PHP在某些条件 PHP 上创建唯一数组
【发布时间】:2014-03-29 19:19:35
【问题描述】:

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

请帮忙提前谢谢

【问题讨论】:

    标签: php arrays array-unique


    【解决方案1】:
    $newarr = array();
    foreach($array as $v) {
        if (!isset($newarr[$v['id']]) || ($newarr[$v['id']] < $v['point'])) {
           $newarr[$v['id']] = $v['point'];
        }
    }
    

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

    【讨论】:

    • 我应该在上面的函数中使用这个
    【解决方案2】:
    $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;
    }
    

    【讨论】:

    • 但这不起作用..如果每个数组还有一个名为 $result['score'] 的元素会怎样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多