我继承了项目,数据结构有点乱。基本上,用户输入数据并且它是非分层结构的(&#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(该字段的输入值中的值)。
所需的结构将是这样的:
这将允许我循环遍历整个$ books数组,为每个作者创建一个并创建一个表,其中列出一个每行详细信息的$ title。
答案 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]
,以便它可以是您想要的author
和title
的多维数组,
$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