[英]Sorting a complex multi-dimensional array
我有这个复杂的数组,我需要按数组内部的值进行排序。
这是数组结构:
$array = array(
array(
'data' => array(
'tree_id' => 0,
'title_tag' => 'Annex A',
),
'nodes' => array(
array(
array(
'data' => array(
'tree_id' => 0,
'title_tag' => 'Annex A'
),
'attachments' => array(
'title_tag' => 'Annex A',
'updated_by' => 'Steve'
)
)
),
array(
array(
'data' => array(
'tree_id' => 0,
'title_tag' => 'Annex B'
),
'attachments' => array(
'title_tag' => 'Annex B',
'updated_by' => 'Steve'
)
)
)
)
)
);
我想按字母顺序对$ array [array [nodes] [array] [array] [data] ['title_tag']]进行排序。
到目前为止,这是我所做的:
foreach( $array as $arr ){
foreach( $arr['nodes'] as $node ){
foreach( $node as $data ){
$keys[] = $data['data']['title_tag'];
}
array_multisort($keys,SORT_DESC,$node);
}
}
您可以使用用户定义的排序...
function my_array_sort($a, $b) {
// compare the 2 elements
return strnatcmp ( $a[0][data]['title_tag'], $b[0][data]['title_tag'] );
}
foreach( $array as $arr ) {
uasort($arr['nodes'], "my_array_sort");
}
但是认真的人,我建议创建一个类作为“节点”对象。 这将使您的代码更易于使用,并具有确定的结构,而无需记住每个键名。
您也不需要将每个节点在数组对象中包装两次。 这将做同样的事情...
'nodes' => array(
array(
'data' => array(
'tree_id' => 0,
'title_tag' => 'Annex A'
),
'attachments' => array(
'title_tag' => 'Annex A',
'updated_by' => 'Steve'
)
),
array(
'data' => array(
'tree_id' => 0,
'title_tag' => 'Annex B'
),
'attachments' => array(
'title_tag' => 'Annex B',
'updated_by' => 'Steve'
)
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.