0

さて、私は再びPHPで配列を扱っています。私を正しい方向に導くためにあなたの手が必要です。次の配列があるとします。

-fruits
    --green
        ---limon
        ---mango
    --red
        ---apple


-cars
    --ferrari
        ---enzo
            ----blue
            ----black
        ---318
    --lamborg
        ---spider
        ---gallardo
            ----gallado-96
                -----blue
                -----red
            -----gallado-98

- (ハイフン) 記号は、深いレベルのみを示しています。

さて、別の配列 (または何でも) を構築する必要があります。これは、以下のように HTML 選択として出力する必要があるためです。

-fruits
--green
---limon
---mango
--red
---apple
-cars
--ferrari
---enzo
----blue
----black
---318
--lamborg
---spider
---gallardo
----gallado-96
-----blue
-----red
-----gallado-98

レベル要素ごとに、スペースまたはハイフンを追加して、特定の親に属していることを確認するように見えます。

編集

私の最終的なコードを提供する答えを提供しています。html の select 要素は、各レベルを文字列として表示します (複数レベルの要素ではなく、テキストの始めに「-」を繰り返します。

4

2 に答える 2

1

配列を指定して選択ドロップダウンを作成する単純な再帰関数を次に示します。残念ながら、私はそれをテストすることはできませんが、うまくいくかどうか教えてください. 使用法は次のようになります。

function generateDropdown($array, $level = 1)
{
    if ($level == 1)
    {
        $menu = '<select>';
    }
    foreach ($array as $a)
    {
        if (is_array($a))
        {
            $menu .= generateDropdown($a, $level+1);
        }
        else
        {
            $menu .= '<option>'.str_pad('',$level,'-').$a.'</option>'."\n";
        }
    }
    if ($level == 1)
    {
        $menu = '</select>';
    }
    return $menu;
}
于 2012-09-30T02:07:23.123 に答える
0

OK、@jmgardhn2 の助けを借りて入手しました。

データ

これは私の配列です:

$temp = array(
            array(
                'name' => 'fruits',
                'sons' => array(
                            array(
                                'name' => 'green',
                                'sons' => array(
                                        array(
                                            'name' => 'mango'
                                        ),
                                        array(
                                            'name' => 'banana',
                                        )
                                    )
                                )
                            )
            ),
            array(
                'name' => 'cars',
                'sons' => array(
                            array(
                                'name' => 'italy',
                                'sons' => array(
                                            array(
                                                'name' => 'ferrari',
                                                'sons' => array(
                                                        array(
                                                            'name' => 'red'
                                                        ),
                                                        array(
                                                            'name' => 'black'
                                                        ),
                                                    )
                                            ),
                                            array(
                                                'name' => 'fiat',
                                            )
                                )
                            ),
                            array(
                                'name' => 'germany',
                                'sons' => array(
                                            array(
                                                'name' => 'bmw',
                                            )
                                        )
                            ),
                )
            )    
        );

再帰関数

さて、次の関数は次のような項目を含む配列を提供します[level] => [name]:

function createSelect($tree, $items, $level)
{
    foreach ($tree as $key)
    {
        if (is_array($key))
        {
            $items = createSelect($key, $items, $level + 1);
        }
        else
        {
            $items[] = array('level' => $level, 'text' => $key);
        }
    }

    return $items;
}

関数の呼び出し

次に、次のように関数を呼び出します。

$items = createSelect($temp, array(), 0);

出力

最後の $items 配列を繰り返すと、次のようになります。

1fruits
2green
3mango
3banana
1cars
2italy
3ferrari
4red
4black
3fiat
2germany
3bmw
于 2012-09-30T03:01:26.130 に答える