2017-07-26 21 views
0

次のデータをキーの日付と名前の値でソートしようとしています。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関数を使用する必要があります。

の$ ARRは、あなたの配列です:

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

私はksort($ 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私は私の答えを変更しました、私の答えをもう一度お試しください。 –

関連する問題