PHP排序分组数组

时间:2019-03-13 10:46:21

标签: php arrays sorting multidimensional-array

我有这个数组:

    $test['name1'][256]=[
       'lead_data'=>[
           'date'=>'13.03.2019',
           'address'=>'addr1'
       ]
   ];
   $test['name1'][257]=[
       'lead_data'=>[
           'date'=>'12.03.2019',
           'address'=>'addr2'
       ]
   ];
   $test['name2'][259]=[
       'lead_data'=>[
           'date'=>'15.03.2019',
           'address'=>'addr4'
       ]
   ];
   $test['name2'][260]=[
       'lead_data'=>[
           'date'=>'18.03.2019',
           'address'=>'addr5'
       ]
   ];

有两个组“名称1”和“名称2”。 需要按'date'对数组进行排序,我做到了:

function array_sort_inner_array($array, $on, $order=SORT_ASC){
          $new_array = array();
          $sortable_array = array();
          if (count($array) > 0) {
              foreach ($array as $k => $v) {
                  if (is_array($v['lead_data'])) {
                      foreach ($v['lead_data'] as $k2 => $v2) {
                          if ($k2 == $on) {
                              $sortable_array[$k] = $v2;
                          }
                      }
                  } else {
                      $sortable_array[$k] = $v['lead_data'];
                  }
              }
              switch ($order) {
                  case SORT_ASC:
                      asort($sortable_array);
                      break;
                  case SORT_DESC:
                      arsort($sortable_array);
                      break;
              }
              foreach ($sortable_array as $k => $v) {
                  $new_array[$k] = $array[$k];
              }
          }
          return $new_array;
      }



 $testSort =[];
   foreach ($test as $k=>$t){
       $testSort[$k]=array_sort_inner_array($t,'date',SORT_DESC);
   }

不是我想要按“日期”列对组“名称1”和“名称2”进行排序。 因此,“名称2”必须是第一个,“名称1”组必须是第二个,因为“名称2”的日期为“ 18.03.2019”,并且它是最高值。 不知道该怎么做。请帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

我的意思是将array_columnuasort用作:

function getMaxDate($e) {
    return max(array_column(array_column($e, "lead_data"), "date"));
}

uasort($test, function ($a, $b) {return strcmp(getMaxDate($b), getMaxDate($a));;});

注意-如果需要,您仍然需要对内部数组进行排序-我仅演示了如何对最大日期进行外部排序-内部排序可以通过以下方式完成:

foreach($test as &$e)
    uasort($e, function ($a, $b) {return strcmp($a['lead_data']['date'], $b['lead_data']['date']);;});

参考:uasortarray-column