【问题标题】:Multi dimensional array iteration Smarty多维数组迭代 Smarty
【发布时间】:2011-11-20 23:02:00
【问题描述】:

我有两个数组。在第一个数组中,我有类型和区域字段名称。这两个字段名称有多个值。我正在使用智能。我希望从第一个数组中选择名称,每个下拉列表的选项将来自第二个数组。这是我尝试过的:

{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 [价值] => 笔记本电脑 )

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

    )

)

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

提前致谢。

【问题讨论】:

    标签: php multidimensional-array foreach drop-down-menu smarty


    【解决方案1】:

    首先;第一个数组有 id 的 2 和 1 分别映射到 Type 和 Zone。您的第一个 smarty 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”作为值数组的索引变为“类型”和“区域”。这样的构造应该是可以工作的。

    有关上述的键盘示例,请参阅http://codepad.org/kzfaYuSd。我相信这与您尝试使用数组完成的工作有些相同。它仍然意味着更改数组;但否则你可能会在 smarty 模板中做很多逻辑,这真的让它们不可读。不幸的是,键盘没有 smarty;但我知道 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

    祝你好运!

    【讨论】:

    • 感谢您的回复。我需要按照你所说的第一种方式完成。但是你能再描述一下吗,因为我现在无法理解。
    • 嗯,我不认为我完全理解你的问题。如果我说第二个数组由两个数组组成,您 both 同时需要选择中的选项,我是否正确?因为这可能真的很困难,不可读且不可维护...... -edit- 我认为您甚至可能希望将所有数据放在一个数组中,所有数据都可以使用;而不是这种纯粹在数组值中具有依赖关系的多数组构造......
    • 也许您可以在问题中详细说明您的问题;你希望这段代码输出什么?
    • 有两张表,一张是extra_fields,一张是extra_fields_value。第一个包含区域和类型,其他表包含它们的值。两个表都通过 fieldid 链接在一起。我需要在区域下拉列表中填充区域的选项,并且类型相同。
    • 如果我理解正确,您是直接将 SQL 查询输出分配给 smarty(有点)?如果是这样,那么我认为你可能会更好地在你的 php 代码中执行大部分逻辑并通过我给出的第二个示例。您可以使用 extra_fields 的 field_id 值作为 $items 数组的索引;并使用 extra_fields_value 结果中的 field_id 值将正确的值添加到正确的项目中。我会放一个键盘来说明这一点:)。
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2012-01-14
    • 2023-03-08
    • 2014-05-17
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多