PHP排序分组数组



我有这个数组:

    $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'
       ]
   ];

有两个组" name1"one_answers" name2"。需要在"日期"之前将内部排序,我做到了:

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);
   }

而不是我想要按" date"列进行排序组" name1"one_answers" name2"。因此," name2"必须是第一个," name1"组必须是第二,因为'name2'的日期'18 .03.2019',这是最高值。不知道该怎么做。请帮助我,谢谢!

我的意思是使用array_columnuasort AS:

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']);;});

参考:Uasort,Array-Column

相关内容

  • 没有找到相关文章

最新更新