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