2017-07-26 188 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我改變了我的答案,請再試一次我的答案。 –