按距离删除数组中的名称



我有一个多维数组,如下所示:

[0] => Array
    (
        [dist] => 5.421905274077098
        [name] => venue1
    )
[1] => Array
    (
        [dist] => 1.6506176672720143
        [name] => venue2
    )
[2] => Array
    (
        [dist] => 0.9541989204006235
        [name] => venue1
    )

我试图删除任何具有相同名称的,但具有优先级的距离,所以在上面的例子中,第三项将保留,而第一个项将被删除。到目前为止,我已经尝试遍历数组两次,并取消设置具有相同名称和较小距离的数组,但这似乎并没有删除它们

for($i=0 ; $i<count($returned) ; $i++) {
    for($j=0 ; $j<count($returned) ; $j++) {
        if(!$returned[$j] || !$returned[$i]) {
        } else {
            if($returned[$j]['name']==$returned[$i]['name']) {
                if($returned[$j]['dist']<$returned[$i]['dist']) {
                    unset($returned[$i]);
                }
            }
        }
    }
}

你可以像这样使用一个临时数组:

$result = array();
foreach ($returned as $item) {
    $name = $item['name']; // convenience variable
    if (!isset($result[$name]) || 
            $result[$name]['dist'] > $item['dist']) {
        // add or overwrite
        $result[$name] = $item;
    }
}

之后,$result数组将有效地包含移除后的项。

最新更新