我想撰寫一個 PHP 函式來通過特定鍵(例如(account_id,first_name))對下面給定的多維陣列進行排序,我撰寫了下面的代碼,它在第一級作業得很好但是當我發送 account_id 作為引數時,我沒有預期結果。
$data = [
[
'first_name' => 'GM',
'middle_name' => null,
'last_name' => 'Akbari',
'guest_booking' =>[
[
'booking_number' => 20008683,
'ship_code' => 'OST',
'room_no' => 'A0073',
'start_time' => 1438214400,
'end_time' => 1483142400,
'is_checked_in' => true,
]
],
'guest_account' => [
[
'account_id' => 20009503,
'status_id' => 2,
'account_limit' => 0,
'allow_charges' => true,
]
]
],
[
'first_name' => 'Alex ',
'middle_name' => null,
'last_name' => 'Marvi',
'guest_booking' => [
[
'booking_number' => 10000013,
'room_no' => 'B0092',
'is_checked_in' => true,
],
],
'guest_account' => [
[
'account_id' => 10000500,
'account_limit' => 300,
'allow_charges' => true,
],
],
],
];
功能:
function sortMyArray($array, $target_key="") {
$key_values = [];
foreach ($array AS $key => $value) {
if (is_array($value)) {
sortMyArray($value, $target_key);
}
$key_values[] = $value[$target_key];
}
asort($key_values);
$array_sorted = [];
foreach ($key_values AS $k => $v) {
$array_sorted[] = $array[$k];
}
echo "<pre>";print_r($array_sorted); echo "<br />";
}
錯誤:
Warning: Illegal string offset 'account_id' in
期望的結果:
...
...
... 'account_id' => 10000522,
...
... 'account_id' => 20009503,
...
uj5u.com熱心網友回復:
只要您尋求的鍵名與非陣列資料相關聯并且所尋求的鍵不會在相應的子集中多次出現并且每個子集都保證包含所尋求的鍵,那么您就可以使用array_walk_recursive()來收集一個平面陣列值然后使用排序值的平面陣列通過參考對原始陣列進行排序。
代碼:(演示)
function sortMyArray(array &$array, $target_key) {
$columnValues = [];
array_walk_recursive(
$array,
function($v, $k, $key) use (&$columnValues) {
if ($k === $key) {
$columnValues[] = $v;
}
},
$target_key
);
array_multisort($columnValues, $array);
}
sortMyArray($data, 'account_id');
var_export($data);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532457.html
上一篇:如果陣列在JavaScript中是[1,2,3,4,5],我如何回傳“1-5”?
下一篇:如何洗掉我的列印陳述句中的方括號
