我有两个数组。在第一个数组中,我有Type和Zone字段名称。这两个字段名称具有多个值。我用得很聪明。我想从第一个数组中选择名称,每个下拉列表的选项将来自第二个数组。这就是我的尝试:
{foreach from=$field_names item=fld_name}
<tr>
<td width="3%" height="15" style="font-weight:bold;height:30px; padding-top:5px;"> </td>
<td width="32%" height="15" valign="middle" style="font-weight:bold;height:30px; padding-top:5px;"> {$fld_name}:</td>
<td width="65%" height="15" valign="middle" style=" padding-top:5px;">
<select name="{$fld_name}" id="{$fld_name}" style="width:95px">
<option value="-1">Any</option>
{foreach from=$field_values item=fld_val key=key}
<option value="{$fld_val.$key.value}">{$fld_val.$key.value}</option>
{/foreach}
</select>
</td>
</tr>
{/foreach}
这是数组的输出:
This is the Output of first array:
阵 ( [2] =&gt;类型 [1] =&gt;区 )
这是第二个数组: 排列 ( [0] =&gt;排列 ( [0] =&gt;排列 ( [productid] =&gt; 141 [fieldid] =&gt; 2 [value] =&gt;笔记本电脑 )
[1] => Array
(
[productid] => 191
[fieldid] => 2
[value] => Books
)
[2] => Array
(
[productid] => 177
[fieldid] => 2
[value] => Printer
)
)
[1] => Array
(
[0] => Array
(
[productid] => 141
[fieldid] => 1
[value] => 3
)
[1] => Array
(
[productid] => 191
[fieldid] => 1
[value] => 4
)
[2] => Array
(
[productid] => 177
[fieldid] => 1
[value] => 2
)
)
)
我在下拉列表中获得了相同的选项。我做错了什么,请帮助..
提前致谢。
答案 0 :(得分:2)
首先关闭;第一个数组的id为2,1分别映射到Type和Zone。您的第一个聪明的foreach将循环遍历该数组,并将产品类型和区域作为$ fld_name变量的值。
然而,第二个foreach正在与第一个没有任何关系;因此,通过该数组的两次迭代都是相同的。我相信我的一个Smarty模板中有类似的情况;但是因为我在工作,我不能看看他们:(。
反正;我相信我做了一个对象或一个名字作为索引的数组;因此,在您的情况下,Type的选项将位于“Type”索引下的第二个数组中,对于Zone也是如此。 这样,您可以通过属于给定键的第二个数组部分:
{foreach $field_names as $field_name}
...
{foreach $field_values[$field_name] as $field_value}
...
{/foreach}
{/foreach}
你的第二个数组会从'0'和'1'变为值数组的索引,变为'Type'和'Zone'。这种结构应该能够起作用。
有关上述代码示例的示例,请参阅http://codepad.org/kzfaYuSd。我相信这与您尝试使用数组完成的操作有些相同。它仍然意味着改变阵列;但是否则你可能会在smarty模板中做很多逻辑,这真的让它们变得难以理解。不幸的是,键盘没有聪明;但我知道聪明的人可以对foreach陈述做同样的事情:)。
辅助方法是为字段创建对象,包括字段名称和字段值作为属性:
$items = new array();
$item1 = new StdObject();
$item1->field_name = "Type";
$item1->field_values = new array("Value1", "Value2");
$items[] = $item1;
然后在smarty中(假设$ items映射到$ items):
{foreach $items as $item}
$item->field_name
{foreach $item->field_values as $value}
$value
{/foreach}
{/foreach}
(当然包括你自己的代码围绕这些值:))。
键盘说明后者:http://codepad.org/flIhRlmO
祝你好运!