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 に答える