按距离删除数组中的名称

时间:2014-06-26 11:01:14

标签: php arrays

我有一个多维的场地阵列,如下:

[0] => Array
    (
        [dist] => 5.421905274077098
        [name] => venue1
    )

[1] => Array
    (
        [dist] => 1.6506176672720143
        [name] => venue2
    )

[2] => Array
    (
        [dist] => 0.9541989204006235
        [name] => venue1
    )

我试图删除任何具有相同名称的内容,但优先考虑距离,因此在上面的示例中,第3项将保留,并且第一项将被删除。到目前为止,我已尝试循环遍历数组两次,并取消设置任何具有相同名称和更少距离的数据,但这似乎不会删除它们

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]);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用这样的临时数组:

$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数组将在删除后有效地包含项目。