从复杂数组创建选择列表

时间:2013-07-22 14:21:16

标签: php

假设我有一个像:

这样的数组
Array
(
[1] => Array
    (
        [name] => 85 x 55mm
        [options] => Array
            (
                [2] => Array
                    (
                        [2] => Ivory Board
                        [3] => Silk Board
                    )

                [6] => Array
                    (
                        [4] => 330gsm
                        [5] => 400gsm
                    )

            )

    )
)

内部选项可以包含x个值。在这个例子中,我想要一个选择列表,它将从根父键链接选项id(可能超过1个父级,但在这种情况下只有1个)和不包括父名称的值,即

<h1>85 x 55mm</h1>
<select name="1">
<option value="1,2,4">Ivory Board, 330gsm</option>
<option value="1,3,5">Silk Board, 400gsm</option>
</select>

尝试重新键入阵列,但很难合并。

2 个答案:

答案 0 :(得分:0)

我有一个来自iTunes的复杂轨道信息数组,其中我要循环的键值称为“轨道”。与每首曲目相关的属性数量各不相同。

要遍历数组,我使用foreach循环。

$trackArray = (array_keys)$plist['Tracks']));

这设置了我感兴趣的密钥。然后我使用这个循环。

    foreach ($trackArray as $value){
$trackID = ($plist['Tracks'][$value]['TrackID');
$artist = ($plist['Tracks'][$value]['artist']);
}

我花了很多时间来寻找合适的解决方案,我发现var_dump()和print_r()函数非常有价值。

我认为通过一些游戏你可以使用我上面使用的东西得到你想要的东西。

让我知道你是怎么过的。如果你仍然遇到困难,如果我可以有更多的代码,也许我可以解决一些问题。

取值

答案 1 :(得分:0)

以下重构数组,将选项特征分组在一起:

$arr = array (
    1 => array (
            'name' => '85 x 55mm',
            'options' => array (
                    2 => array (
                            2 => 'Ivory Board',
                            3 => 'Silk Board'),
                    6 => array (
                            4 => '330gsm',
                            5 => '400gsm'))));
$out = array();
foreach ($arr as $key => $value){
    $out[$key]['name'] = $value['name'];
    $ops = $value['options'];
    array_unshift($ops, null);
    $ops = call_user_func_array('array_map', $ops);
    $out[$key]['options'] = $ops;
}

输出:

Array(
    [1] => Array(
            [name] => 85 x 55mm
            [options] => Array(
                    [0] => Array(
                            [0] => Ivory Board
                            [1] => 330gsm
                        )
                    [1] => Array(
                            [0] => Silk Board
                            [1] => 400gsm
                        )
                )
        )
)

以下为数组中的每个项目创建选择菜单(在您的示例中,只有一个项目):

$select = '';
foreach ($out as $key => $value){
    $select .= "<h1>".$value['name']."</h1>\n";
    $select .= "<select name='".$key."'>\n";
    foreach ($out[1]['options'] as $key2 => $value2){
        $select .= "<option value=''>".implode(', ', $value2)."</option>\n";
    }
    $select .= "</select>\n";
}

输出:

<select name='1'>
<h1>85 x 55mm</h1>
<option value=''>Ivory Board, 330gsm</option>
<option value=''>Silk Board, 400gsm</option>
</select>

我无法弄清楚选项标签中的值来自何处,因此我不得不将该部分留空。