У меня есть массив в 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
$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, потому что это порядок сортировки по умолчанию.