2017-07-26 154 views
0

我想按键和Name的值中的日期对以下数据进行排序。PHP按键和值对多维关联数组排序

目标是按照字母顺序从内部数组中获取所有名称的有序数组。

Array 
(
    [2017-07-27] => Array 
     (
      [0] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Orange 
         ) 

       ) 

      [4] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Apple 
         ) 

       ) 
     ) 
    [2017-07-22] => Array 
     (
      [6] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Apple 
         ) 

       ) 

      [7] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Orange 
         ) 

       ) 
     ) 
    [2017-07-29] => Array 
     (
      [9] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Orange 
         ) 

       ) 

      [11] => stdClass Object 
       (
        [Job] => stdClass Object 
         (
          [Name] => Plumb 
         ) 

       ) 
     ) 
) 

我很确定我应该使用array_multisort,但不能完全得到预期的结果。

+0

请使用var_export()打印数组,然后更新为新输出的职位。这会给我们一个代码示例,我们可以为您复制,粘贴和测试。谢谢。 http://php.net/manual/en/function.var-export.php –

回答

0

如果要对对象属性进行排序,则必须拆分代码,请使用usort函数。

其中$改编为您的数组:

uksort($arr, 'dateCmp'); 
foreach($arr as &$sub){ 
    usort($sub, 'propCmp'); 
} 

function dateCmp($a, $b){ 
    return (strtotime($a) < strtotime($b) ? -1 : 1); 
} 

function propCmp($a, $b){ 
    return ($a->Job->Name < $b->Job->Name ? -1 : 1); 
} 
+1

我使用kso​​rt($ arr,SORT_REGULAR)稍微细化了这个;而不是用户定义的功能。 – Sam

0

请尝试以下代码,

$sorted_vals = array(); 
ksort($multiArrs); 
foreach($multiArrs as $key => $value) { // $multiArrs = your data array 
    $columns = null; 
    foreach ($value as $index => $element) { 
     $columns[] = $element->Job; 
    } 
    $temp = $value; 
    array_multisort($columns, SORT_ASC, $temp); 
    $sorted_vals[$key] = $temp; 
} 
+0

@Sam我改变了我的答案,请再试一次我的答案。 –