我在 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] 的 [value] 進行排序。我的代碼不起作用,因為它試圖對陣列而不是值進行排序。
uj5u.com熱心網友回復:
試試這個...
<?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);
uj5u.com熱心網友回復:
如果您洗掉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,因為這是默認的排序順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474648.html
下一篇:帶有列的熊貓操作
