Удаление имен в массиве на расстоянии

#php #arrays

#php #массивы

Вопрос:

У меня есть многомерный массив таких мест, как:

 [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. вы уверены, что ваш массив выглядит так? или может быть массив (‘name’ => ‘venue1’, ‘dist’ => ‘100’) и так далее

2. вы перепутали JSON Array

3. После вашего редактирования все имена уникальны.. значит, никакие элементы не будут удалены?

Ответ №1:

Вы можете использовать временный массив, подобный этому:

 $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 этого массив будет эффективно содержать элементы после удаления.