繁体   English   中英

排序复杂的多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM