按列中的列值对多维数组进行排序
Sort multidimensional array by column value within a column
我在 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 将按预期对您的子数组进行排序并删除它。它将从子数组的开头进行比较。 (Demo)
array_multisort(array_column($array, 'earnest_money_due'), $array);
如果这看起来很老套、不可靠或不直观,array_map()
没问题。 (Demo)
array_multisort(array_map(fn($row) => $row['earnest_money_due']['value'], $array), $array);
使用usort()
也没有错。 (Demo)
usort($array, fn($a, $b) => $a['earnest_money_due']['value'] <=> $b['earnest_money_due']['value']);
无论您使用哪种 array_multsort()
技术,都不需要明确使用 SORT_ASC
,因为这是默认排序顺序。
我在 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 将按预期对您的子数组进行排序并删除它。它将从子数组的开头进行比较。 (Demo)
array_multisort(array_column($array, 'earnest_money_due'), $array);
如果这看起来很老套、不可靠或不直观,array_map()
没问题。 (Demo)
array_multisort(array_map(fn($row) => $row['earnest_money_due']['value'], $array), $array);
使用usort()
也没有错。 (Demo)
usort($array, fn($a, $b) => $a['earnest_money_due']['value'] <=> $b['earnest_money_due']['value']);
无论您使用哪种 array_multsort()
技术,都不需要明确使用 SORT_ASC
,因为这是默认排序顺序。