[英]PHP sort multidimensional array
我有一個看起來像這樣的數組:
Array
(
[13] => Array
(
[name] => Blah blah
[description] => Blah blah blah
[parent_group_id] => 8
[display] => Blah : Blah
[stamps] => Array
(
[73] => Array
(
[stamp_id] => 73
[name] => Blah
[is_member] =>
[rank] => 2 <--
[description] => Blah blah blah
[rank_token] => easy
)
[80] => Array
(
[stamp_id] => 80
[name] => Blah
[is_member] =>
[rank] => 1 <--
[description] => Blah blah blah
[rank_token] => medium
)
[73] => Array
(
[stamp_id] => 73
[name] => Blah
[is_member] =>
[rank] => 4 <--
[description] => Blah blah blah
[rank_token] => easy
)
[80] => Array
(
[stamp_id] => 80
[name] => Blah
[is_member] =>
[rank] => 3 <--
[description] => Blah blah blah
[rank_token] => medium
)
)
)
)
但是,我想按['rank']所持有的數字(分別為1、2、3和4)對這個數組中的對象進行排序。(我在代碼示例中添加了箭頭)因此在使用usort之后,我希望所有內容都按數字順序進行整理。 所以我希望它看起來像這樣:
Array
(
[13] => Array
(
[name] => Blah blah
[description] => Blah blah blah
[parent_group_id] => 8
[display] => Blah : Blah
[stamps] => Array
(
[80] => Array
(
[stamp_id] => 80
[name] => Blah
[is_member] =>
[rank] => 1 <--
[description] => Blah blah blah
[rank_token] => medium
)
[73] => Array
(
[stamp_id] => 73
[name] => Blah
[is_member] =>
[rank] => 2 <--
[description] => Blah blah blah
[rank_token] => easy
)
[80] => Array
(
[stamp_id] => 80
[name] => Blah
[is_member] =>
[rank] => 3 <--
[description] => Blah blah blah
[rank_token] => medium
)
[73] => Array
(
[stamp_id] => 73
[name] => Blah
[is_member] =>
[rank] => 4 <--
[description] => Blah blah blah
[rank_token] => easy
)
)
)
)
我的實際數組更大,但是它仍然遵循這種模式。
如果我正確理解了您的問題,這應該可以工作:
function cmp($a, $b)
{
if ($a['rank'] == $b['rank']) {
return 0;
}
return ($a['rank'] < $b['rank']) ? -1 : 1;
}
foreach($yourArray as &$entry) {
uasort($entry['stamps'], "cmp");
}
unset($entry);
print_r($yourArray);
請注意,cmp功能與手冊中的功能幾乎相同。 foreach中的&表示所創建的變量是數組成員的別名,而不是副本的別名(如PHP通常那樣)。 之所以存在unset()是因為,如果以后嘗試使用名為$ entry的變量,則實際上是在操縱數組中的最后一個條目。
如果您對此感到不舒服,則可以通過其他方法對其進行皮膚處理。 例如,您可以創建第二個函數並將array_map映射到原始函數,從而:
function cmp($a, $b)
{
if ($a['rank'] == $b['rank']) {
return 0;
}
return ($a['rank'] < $b['rank']) ? -1 : 1;
}
function sort_entry($entry)
{
uasort($entry['stamps'], "cmp");
return $entry;
}
array_map('sort_entry', $yourArray);
print_r($yourArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.