Выберите массив с наименьшим значением расстояния из массива - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть массив с некоторыми данными, включая расстояние.

Массив выглядит так:

$arr = array
(
    0 => array
        (
            'distance' => 0.00037306794379581,
            'city' => 'a'
        ),

    1 => array
        (
            'distance' => 0.00070784665463427,
            'city' => 'b'
        ),

    2 => array
        (
            'distance' => 0.0033977868300665,
            'city' => 'c'
        ),

    3 => array
        (
            'distance' => 0.012137901860616,
            'city' => 'd'
        ),

);

Я хочу получить массив с наименьшим значением distance, в этом случаеоно должно быть первым

0 => array ( 'distance' => 0.00037306794379581, 'city' => 'a' )

Я могу получить наименьшее расстояние от всего массива, используя:

$min = array_reduce($arr, function($min, $details) {
  return min($min, $details['distance']);
}, PHP_INT_MAX);

Но как получить массив с этимминимальное расстояние

0 => array ( 'distance' => 0.00037306794379581, 'city' => 'a' )?

Или хотя бы получить город с таким минимальным расстоянием

1 Ответ

0 голосов
/ 01 ноября 2019

Можно отсортировать по возрастанию расстояния, а затем взять первый элемент.

<?php

$array =
[
    [
        'distance' => 3,
        'city' => 'Leeds'
    ],
    [
        'distance' => 1,
        'city' => 'Manchester'
    ],
    [
        'distance' => 2,
        'city' => 'Chichester'
    ]
];

array_multisort(array_column($array, 'distance'), $array);
var_dump($array[0]);

Вывод:

array(2) {
    ["distance"]=>
    int(1)
    ["city"]=>
    string(10) "Manchester"
  }
...