多维数组迭代Smarty


Multi dimensional array iteration Smarty

我有两个数组。在第一个数组中,我有Type和Zone字段名。这两个字段名有多个值。我在用smarty。我想从第一个数组的选择名称和每个下拉菜单的选项将来自第二个数组。这是我尝试过的:

{foreach from=$field_names item=fld_name}
        <tr>
            <td width="3%" height="15" style="font-weight:bold;height:30px; padding-top:5px;">&nbsp;</td>
            <td width="32%" height="15" valign="middle" style="font-weight:bold;height:30px; padding-top:5px;">&nbsp;{$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] =>键入[1] =>分区)

这是第二个数组:数组([0] =>数组([0] =>数组([productid] => 141[fieldid] => 2[value] =>笔记本电脑)

        [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
            )
    )

)

我在两个下拉菜单中都得到了相同的选项。我做错了什么,请帮帮我。

First off;第一个数组的id为2和1,分别映射到Type和Zone。您的第一个智能foreach将遍历该数组,并将product Type和Zone作为$fld_name变量的值。

然而,第二个foreach与第一个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模板中做很多逻辑操作,这会让模板变得难以读懂。不幸的是,codepad没有聪明;但是我知道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

祝你好运!