php:创建多级数组

时间:2016-07-19 08:55:28

标签: php arrays associative-array

我继承了项目,数据结构有点乱。基本上,用户输入数据并且它是非分层结构的(&#34;页面&#34;不是&#34;书名和#34的属性;但两者都只是没有任何关系的值。)< / p>

现在我想创建一个更有序的结构,即我想按作者列出书籍,按标题列出书籍详细信息。

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

我想将键分配给前两个数组级别。我尝试了$books["author" => $item->author]["title" => $item->title],但收到了错误消息。

如何在这种情况下分配键而不必通过多个foreach循环运行整个事件?

编辑:关于对象结构的说明:

该网站在CMS上运行,客户端使用插件构建自己的输入表单。 所有数据都保存在博客中。这些博客文章有默认输入字段($ item-&gt; author和$ item-&gt; title),然后有一个自定义字段选项,客户输入所有细节,即$ item-&gt; details-&gt; pages-&gt ; value(该字段的输入值中的值)。

所需的结构将是这样的:

  • 书籍
    • 作者
      • 标题
        • genres(array)
      • 标题
        • genres(array)
      • 标题
        • genres(array)
    • 作者
      • 标题
        • genres(array)
      • 标题
        • genres(array)
      • 标题
        • genres(array)

这将允许我循环遍历整个$ books数组,为每个作者创建一个并创建一个表,其中列出一个每行详细信息的$ title。

2 个答案:

答案 0 :(得分: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
        )
     );
}

更新了代码,[]之后只需要[$item->author][$item->title],以便它可以是您想要的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
     );
}

并访问数组,

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

答案 1 :(得分:-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