关于下一件事,我有点空白。我恐怕不是应该接近这个问题。我有一个多维数组来显示自定义cms中的编辑器。它看起来像这样:
$options = array(
array("template","Design skelet","Selecteer het gewenste design","text","false",array("front","content","subcontent","action","special","system"),"true"),
array("is_menu","Menu item","Selecteer de gewenste plaats in het menu","select","false",$catch_menu_sec['alias'],"true"),
array("category","Pagina categorie","Voeg hier de pagina naam in","text","false","","true"),
);
$options
的存储方式如下:
$option[0]
=数据库值。
$option[1]
= cms中前端的可读值。
$option[2]
= cms用户的说明。
$option[3]
=编辑类型(textarea,text或select)
$option[4]
=如果编辑器有特殊选项。
$option[5]
= **问题出在哪里。以下是为select输入选项存储的值。
$option[6]
=如果字段显示在cms中。
现在我遇到了$option[5]
的问题。我想检索数据库值,以便我可以获得数据库中每个菜单项的下拉列表。 $option[5]
用于创建secundair菜单甚至是tertaire,您可以在其中选择应该是其子项的菜单项。
我希望它的html输出是这样的:
<select name="is_menu">
<option name="true">True</option> <- basic option to set it in primair menu, coming from the array
<option name="false">False</option> <- basic option, coming from the array
<option name="home">Home</option> <- database value, coming from the array
</select>
我知道我不能在数组中放置while或foreach循环,但是我怎么能解决这个问题呢?
提前致谢!
PS:我在这方面有基本的PHP知识,所以请不要苛刻我的错误解释:)
答案 0 :(得分:1)
编辑要在数据库记录中获取子数组,请使用左连接和GROUP_CONCAT()
,或者执行两个查询,一个查询到主表,然后一个到您的相关表格(使用WHERE
中第一个结果中的ID)添加到第一个集合。如果使用unique / primary键作为索引构造结果数组,那么很多就更容易了。然后,您可以使用array_keys()
进行第二次查询,并在添加相关记录时能够通过id来解决第一个结果中的行。
$options
中的每个数组成为一个关联数组,如下所示:
$options = [
[
'db_val' => 'template',
'label' => 'Design skelet',
...
],
...
];
然后你可以迭代你的数组:
foreach ($options as $option) {
...
echo '<select name="', $option['db_val'], '">';
foreach ($option['select_opts'] as $select_opt => $label) {
echo '<option value="', $select_opt, '">', $label, '</option>';
}
echo '</select>';
...
}