Сортировка многомерного массива по значению столбца в столбце

У меня есть массив в PHP, и мне нужно отсортировать по вложенному массиву внутри массива...

Вот мой массив:

Array
(
    [0] => Array
        (
            [project_id] => 1
            [earnest_money_due] => Array
                (
                    [value] => 1000.00, 
                    [currency] => 'USD'
                )
        )
    [1] => Array
        (
            [project_id] => 2
            [earnest_money_due] => Array
                (
                    [value] => 200.00,
                    [currency] => 'USD'
                )
        )
    [2] => Array
        (
            [project_id] => 3
            [earnest_money_due] => Array
                (
                    [value] => 900.00,
                    [currency] => 'USD'
                )
        )

Вот как я пытаюсь его отсортировать:

$records - это массив записей

$column - это сортируемый столбец "earnest_money_due"

$columns = array_column($records, $column);

array_multisort($columns, SORT_ASC, $records);

Мне нужно иметь возможность сортировать по [значению] [earnest_money_due]. Мой код не работает, потому что он пытается отсортировать массив, а не значение.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
24
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуй это...

<?php

$array = [
    [
        'project_id' => 1,
        'earnest_money_due' => [
            'value' => 1000.00,
            'currency' => 'USD',
        ],
    ],
    [
        'project_id' => 2,
        'earnest_money_due' => [
            'value' => 200.00,
            'currency' => 'USD',
        ],
    ],
    [
        'project_id' => 3,
        'earnest_money_due' => [
            'value' => 900.00,
            'currency' => 'USD',
        ],
    ],
];

array_multisort(
    array_map(
        static function ($element) {
            return $element['earnest_money_due']['value'];
        },
        $array
    ),
    SORT_ASC,
    $array
);

var_dump($array);

Если вы удалите SORT_ASC, ваш код будет работать нормально. Это связано с тем, что PHP будет сортировать ваш подмассив, как и ожидалось, после его удаления. Он будет сравниваться с начала подмассива. (Демо)

array_multisort(array_column($array, 'earnest_money_due'), $array);

Если это кажется хакерским, ненадежным или неинтуитивным, array_map() в порядке. (Демо)

array_multisort(array_map(fn($row) => $row['earnest_money_due']['value'], $array), $array);

Также нет ничего плохого в использовании usort(). (Демо)

usort($array, fn($a, $b) => $a['earnest_money_due']['value'] <=> $b['earnest_money_due']['value']);

Независимо от того, какой метод array_multsort() вы используете, вам не нужно явно использовать SORT_ASC, потому что это порядок сортировки по умолчанию.

Другие вопросы по теме