2016-07-19 4 views
0

私はプロジェクトを継承し、データ構造はちょっと乱雑です。基本的に、ユーザーはデータを入力し、それは非階層的に構造化されています(「ページ」は「ブックタイトル」のプロパティではありませんが、どちらも関係のない単なる値です)。php:マルチレベル配列を作成する際の配列キーの割り当て

ここでは、より秩序のある構造を作成したいと思います。つまり、書籍を著者別に、書籍の詳細をタイトルで表示したいとします。

foreach($items as $item){ 
    $books[$item->author][$item->title] = array(
     "pages"  => $item->details->pages->value, 
     "published" => $item->details->year->value, 
     "genres"  => $item->details->genres->value 
    ); 
} 

最初の2つの配列レベルにキーを割り当てたいと思います。 $books["author" => $item->author]["title" => $item->title]を試しましたが、エラーメッセージが表示されました。

このような状況でキーを割り当てるには、複数のforeachループですべてを実行する必要はありません。

EDIT:オブジェクトの構造上の注意:

サイトはCMS上で実行され、クライアントはプラグインで自分の入力フォームを構築しました。 すべてのデータはブログポストに保存されます。これらのblogpostsには、デフォルトの入力フィールド($ item-> authorと$ item-> title)があり、クライアントがすべての詳細を入力するカスタムフィールドオプションがあります。例えば、$ item-> details-> pages-> valueそのフィールドの入力値に)。

所望の構造は、このようなものになるだろう:

  • ブック
    • 著者
      • タイトル
        • ページ
        • 本のジャンル(配列)
      • タイトル
        • ページ
        • ジャンル(配列)
      • タイトル
        • ページ
        • ジャンル(配列)
    • 著者
      • タイトル
        • ページ
        • ジャンル(配列)
      • タイトル
        • ページ
        • ジャンル(配列)
      • タイトル
        • ページ
        • ジャンル(配列)

これは、全体の$書籍配列をループに私を許可する各著者のために作成し、行ごとに詳細を1つの$のタイトルを一覧表示し、テーブルを作成します。

+0

エラーメッセージは何ですか? – splash58

+1

あなたは$ item-> author-> valueと$ item-> title-> valueを試してみましたか?$ itemオブジェクトのvar_dumpを使ってその構造を見てください。 –

+0

私はあなたが求める正確な変換を理解するのに苦労しています。あなたの質問では、現在の構造の抜粋と最終的な構造の望ましい結果を表示してください。 – BeetleJuice

答えて

3

することは、更新されたコード

$books=array(); 
foreach($items as $item){ 
    $books[]=array(
     'author'=>$item->author, 
     'title'=>$item->title, 
     'details'=>array(
     "pages"  => $item->details->pages->value, 
     "published" => $item->details->year->value, 
     "genres"  => $item->details->genres->value 
     ) 
    ); 
} 

、これを試してみてください、それは、あなたの希望authortitleの多次元配列にすること

$books=array(); 
foreach($items as $item){ 
    $books[$item->author][$item->title][] =array(
     // ---------------------------^^, this will make it nested array 
     "pages"  => $item->details->pages->value, 
     "published" => $item->details->year->value, 
     "genres"  => $item->details->genres->value 
    ); 
} 

そして、アレイにアクセスできるように、あなただけ、のような[$item->author][$item->title][]が必要

$str=''; 
foreach($books as $author=>$titleDetails){ 
    $str.='<h1>'.$author.'</h1>'; 
    foreach($titleDetails as $title=>$details){ 
     $str.='<br/><h2>'.$title.'</h2>'; 
     $str.='<br/><h3>'.$details['pages'].'</h3>';//.. and so on 
    } 

} 
echo $str; 
+0

これは彼が試みたものと似ています... –

+0

「最初の2つの配列レベルにキーを割り当てたい」というのは、 'author'や' title'のような静的キーを使いたいということなので、 'details'を同じ配列に追加しました。また、 '$ books'は配列の配列でなければならず、著者とタイトルは別の出版年と同じである必要があります。 –

+0

元の質問をちょっと更新しました私が行きたい場所。 – DTX

-1
@media (min-width:481px){ 
#yiv1734505183 .yiv1734505183mobile-hide{ 
display:block;overflow:visible;width:auto 
!important;max-height:inherit !important;min-height:auto 
!important;} 

}@media (min-width:481px 
関連する問題