从数组创建选择选项值列表


Creating select option value list from an array

我有一个这样的数组(存储在$optDir变量中):

Array
(
    [0] => Array
        (
            [id] => 8
            [title] => Atasan Pria
            [idparent] => 5
        )
    [1] => Array
        (
            [id] => 5
            [title] => Fashion
            [idparent] => 0
        )
    [2] => Array
        (
            [id] => 7
            [title] => Motor
            [idparent] => 0
        )
    [3] => Array
        (
            [id] => 6
            [title] => Mobil
            [idparent] => 0
        )
    [4] => Array
        (
            [id] => 9
            [title] => Hem
            [idparent] => 8
        )
)

我有这样的PHP代码:

function optCatAds($pos=0, $level=0){                   
        global $optDir;  $opt = "";
        $n = count($optDir);
        for($i=0;$i<$n;$i++){           
            $l = $level*3;
            $sign=""; for ($z=0;$z<=$l;$z++){$sign.="&nbsp;";}
            if($optDir[$i]['idparent']==$pos){
            $opt .= '<option value="'.$optDir[$i][id].'">'.$sign.$optDir[$i][title].'</option>';
            optCatAds($optDir[$i][id], $level + 1);
            }
        }                               
        return $opt;
    }

当我调用optCatAds函数时,给出如下输出:

<option value="5">Fashion</option>
<option value="6">Mobil</option>
<option value="7">Motor</option>

但是,我想输出如下:

<option value="5">Fashion</option>
<option value="8">  Atasan Pria</option>
<option value="9">    Hem</option>
<option value="6">Mobil</option>
<option value="7">Motor</option>

条件:

  1. 时尚、美孚、汽车<——母

  2. 时尚有孩子AtasanPria

  3. Atasan Pria有孩子大麻

有人能帮我吗?谢谢你的帮助。

这对来说很好

$optDir = Array(Array("id"=>8,"title"=>"Atasan Pria","idparent"=>5),
                Array("id"=>5,"title"=>"Fashion","idparent"=>0),
                Array("id"=>7,"title"=>"Motor","idparent"=>0),
                Array("id"=>6,"title"=>"Mobil","idparent"=>0),
                Array("id"=>9,"title"=>"Hem","idparent"=>8)
                );
function optCatAds($pos=0, $level=0)
{                   
    global $optDir;$opt;
    for($i=0;$i<count($optDir);$i++)
    {           
        $l = $level*3;
        $sign="";
        for ($z=0;$z<$l;$z++){$sign.="&nbsp;";}
        if($optDir[$i]['idparent']==$pos)
        {
            $opt .= '<option value="'.$optDir[$i]['id'].'">'.$sign.$optDir[$i]['title'].'</option>';
            $opt .= optCatAds($optDir[$i]['id'], $level + 1);
        }
    }                               
    return $opt;
}
$res = optCatAds($pos=0, $level=0);
echo "<select>{$res}</select>";

你能试试foreach而不是for循环吗,

foreach($optDir as $k=>$value){     
    $opt .= '<option value="'.$value->id.'">'.$sign.$value->title.'</option>';      
}

$optDir[$i]['title'] 替换$optDir[$i][title]

CCD_ 5与CCD_ 6

这里你正在进行递归调用,所以你不能得到完整的

function optCatAds($pos=0, $level=0){                   
        global $optDir;  $opt = "";
        foreach($optDir as $each){
            if($each['id']==8) $level = 2;
            if($each['id']==9) $level = 3;
            $l = $level*3;
            $sign=""; for($z=0;$z<=$l;$z++){$sign.="&nbsp;";}
            if($each['idparent']==$pos){
                $opt .= '<option value="'.$each['id'].'">'.$sign.$each['title'].'</option>';
            }
        }                               
        return $opt;
    }
<?php
$optDir = Array(
    Array(
        'id' => 8,
        'title' => 'Atasan Pria',
        'idparent' => 5
    ),
    Array(
        'id' => 5,
        'title' => 'Fashion',
        'idparent' => 0
    ),
    Array(
        'id' => 7,
        'title' => 'Motor',
        'idparent' => 0
    ),
    Array(
        'id' => 6,
        'title' => 'Mobil',
        'idparent' => 0
    ),
    Array(
        'id' => 9,
        'title' => 'Hem',
        'idparent' => 8
    )
);
function getOptionsRecursive($idParent = 0, $spaces = '') {
    global $optDir;
    $s = '';
    for($i = 0 ; $i < sizeof($optDir) ; $i++) {
        $current = $optDir[$i];
        if($current['idparent'] == $idParent) {
            $s .= '<option value="'.$current['id'].'">'.$spaces.$current['title'].'</option>';
            $s .= getOptionsRecursive($current['id'], $spaces.' ');
        }
    }
    return $s;
};
echo getOptionsRecursive();
?>