@GeKskill

Сортировка массива PHP по ключу?

array ( 0 => array ( 'id' => '4', 0 => '4',  'address' => 'Гродно', 2 => 'Гродно',  'name' => 'Елена', 11 => 'Елена','distance' => '246.37229654695437', 14 => '246.37229654695437', ), 1 => array ( 'id' => '5', 0 => '5', 'address' => 'Брест', 2 => 'Брест',  'name' => 'Сергей', 11 => 'Сергей', 'distance' => '328.14766422409343', 14 => '328.14766422409343', ), 2 => array ( 'id' => '4', 0 => '4',  'address' => 'Гродно', 2 => 'Гродно', 'name' => 'Елена', 11 => 'Елена','distance' => '0', 14 => '0', ), )


Как отсортировать этот массив по убыванию distance и удалить тот массив где distance больше (c индексом 0)? Функции сортировки просмотрел, не понимаю какую выбрать.
  • Вопрос задан
  • 121 просмотр
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
usort(
  $arr,
  function($a, $b) {
    return $b['distance'] - $a['distance'];
  }
);
array_shift($arr);
Ответ написан
maddog670
@maddog670
$arr = array ( 0 => array ( 'id' => '4', 0 => '4',  'address' => 'Гродно', 2 => 'Гродно',  'name' => 'Елена', 11 => 'Елена','distance' => '246.37229654695437', 14 => '246.37229654695437', ), 1 => array ( 'id' => '5', 0 => '5', 'address' => 'Брест', 2 => 'Брест',  'name' => 'Сергей', 11 => 'Сергей', 'distance' => '328.14766422409343', 14 => '328.14766422409343', ), 2 => array ( 'id' => '4', 0 => '4',  'address' => 'Гродно', 2 => 'Гродно', 'name' => 'Елена', 11 => 'Елена','distance' => '0', 14 => '0', ));

print_r(array_sort($arr, 'distance', SORT_DESC));

function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}
Ответ написан
@GeKskill Автор вопроса
Удалил дубликаты вот таким нехитрым способом:
foreach ($arr as $n) { //проходимся по  массиву
$unique[$n['id']] = $n; // пишем в массив с ключом значения id, при дубле значение будет просто перезаписано
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы