PHP排序多维数组
我有一个如下所示的数组:PHP排序多维数组,php,arrays,organization,usort,Php,Arrays,Organization,Usort,我有一个如下所示的数组: Array ( [13] => Array ( [name] => Blah blah [description] => Blah blah blah [parent_group_id] => 8 [display] => Blah : Blah [stamps] => 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
)
)
)
)
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
)
)
)
)
数组
(
[13] =>阵列
(
[名称]=>诸如此类
[说明]=>诸如此类
[父组id]=>8
[显示]=>诸如此类:诸如此类
[邮票]=>阵列
(
[73]=>阵列
(
[邮票编号]=>73
[名称]=>诸如此类
[is_成员]=>
[排名]=>2等等等等
[rank_token]=>简单
)
[80]=>阵列
(
[邮票编号]=>80
[名称]=>诸如此类
[is_成员]=>
[排名]=>1诸如此类诸如此类
[rank_token]=>中等
)
[73]=>阵列
(
[邮票编号]=>73
[名称]=>诸如此类
[is_成员]=>
[排名]=>4诸如此类诸如此类
[rank_token]=>简单
)
[80]=>阵列
(
[邮票编号]=>80
[名称]=>诸如此类
[is_成员]=>
[排名]=>3诸如此类诸如此类
[rank_token]=>中等
)
)
)
)
但是,我想按照['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
(
[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
)
)
)
)
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
)
)
)
)
数组
(
[13] =>阵列
(
[名称]=>诸如此类
[说明]=>诸如此类
[父组id]=>8
[显示]=>诸如此类:诸如此类
[邮票]=>阵列
(
[80]=>阵列
(
[邮票编号]=>80
[名称]=>诸如此类
[is_成员]=>
[排名]=>1诸如此类诸如此类
[rank_token]=>中等
)
[73]=>阵列
(
[邮票编号]=>73
[名称]=>诸如此类
[is_成员]=>
[排名]=>2等等等等
[rank_token]=>简单
)
[80]=>阵列
(
[邮票编号]=>80
[名称]=>诸如此类
[is_成员]=>
[排名]=>3诸如此类诸如此类
[rank_token]=>中等
)
[73]=>阵列
(
[邮票编号]=>73
[名称]=>诸如此类
[is_成员]=>
[排名]=>4诸如此类诸如此类
[rank_token]=>简单
)
)
)
)
我的实际数组要大得多,但它仍然遵循此模式。如果我正确理解了您的问题,这应该可以工作:
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($a,$b)
{
如果($a['rank']=$b['rank']){
返回0;
}
回报($a['rank']<$b['rank'])?-1:1;
}
foreach($yourrayas&$entry){
uasort($entry['stamps'],“cmp”);
}
未结算(分录);
打印(数组);
请注意,cmp功能与手册中的功能几乎相同。foreach中的符号表示创建的变量是数组成员的别名,而不是副本(PHP通常会这样做)。unset()之所以存在,是因为如果稍后尝试使用名为$entry的变量,实际上将操作数组中的最后一个条目
如果你对此感到不舒服,还有其他的方法来剥它的皮;例如,您可以创建第二个函数并将其映射到原始函数,因此:
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);
函数cmp($a,$b)
{
如果($a['rank']=$b['rank']){
返回0;
}
回报($a['rank']<$b['rank'])?-1:1;
}
函数排序\输入($entry)
{
uasort($entry['stamps'],“cmp”);
返回$entry;
}
数组映射('sort\u entry',$yourray);
打印(数组);
我想这会有帮助:你已经提到了usort,你试过什么了<代码>foreach($key=>$value数组)usort($array[$key]['stamps'],'yourusortfunction')代码>没问题,祝你晚上愉快