PHP foreach基于数组变量

时间:2014-07-13 15:17:25

标签: php arrays

我有以下数组和PHP代码 - 这会在下拉列表中添加option并且工作正常,但这是一个下拉列表。

但是,我想要实现的是为数组中的数组[0]中的每个唯一值创建单独的下拉列表。

因此,基于下面的数组,将有三个下拉列表,一个用于ACME,一个用于EDNON,一个用于VALUE,每个列表将填充已包含在下面的PHP代码中的信息。

阵列

Array (
[4f5hfgb] => Array (
[0] => ACME
[1] => 4f5hfgb
[2] => Aberdeen
)
[sdf4ws] => Array (
[0] => ACME
[1] => sdf4ws
[2] => Birmingham 
)
[dfgdfg54] => Array (
[0] => EDNON
[1] => dfgdfg54
[2] => Birmingham 
)
[345bfg] => Array (
[0] => EDNON
[1] => 345bfg
[2] => Birmingham 
)
[345fgfd] => Array (
[0] => VALVE
[1] => 345fgfd
[2] => Birmingham 
)
)

PHP

echo "
    <span class='Question SelectBox'>
    <span class='qnum noshow'></span>
    <span class='qtext'>Option</span>
    <span class='shown'>
     <select class='combobox' id='option' name='option' data-placeholder=\"Option...\" '>
       <option value=\"\">Option...</option>";

    foreach ($tmp as $value) {
     echo "<option name='".$value[0]."' value='".$value[1]."'>".$value[2]."</option>";
    }
     echo"</select>
     </span>
     </span>
     <span class='clearfix'></span>";

尝试的代码

我尝试修改代码,但这只会产生一个下拉菜单并且选项重复:

foreach ($tmp as $value) {
    if($value[0]=='ACME'){
    echo "<option name='".$value[0]."' value='".$value[1]."'>".$value[2]."</option>";echo "<option name='".$value[0]."' value='".$value[1]."'>".$value[2]."</option>";
    }

}

我很难理解这是否真的可行。欢迎任何建议,反馈和建议。

2 个答案:

答案 0 :(得分:1)

像这样的东西

//------------------------------------------------------------
// Original array of data
//------------------------------------------------------------
$a = array(
'4f5hfgb'  => array('ACME', '4f5hfgb', 'Aberdeen'),
'sdf4ws'   => array('ACME', 'sdf4ws', 'Birmingham'),
'dfgdfg54' => array('EDNON', 'dfgdfg54', 'Birmingham'),
'345bfg'   => array('EDNON', '345bfg', 'Birmingham'),
'345fgfd'  => array('VALVE', '345fgfd', 'Birmingham'));

//------------------------------------------------------------
// Group the options by 'name'
//------------------------------------------------------------
$aGroupedOptions = array();
foreach($a as $aRawOption) {
    list($sName, $sValue, $sOption) = $aRawOption;
    $aGroupedOptions[$sName][]      = array($sValue, $sOption);
}

//------------------------------------------------------------
// Build the HTML
//------------------------------------------------------------
foreach($aGroupedOptions as $sName => $aOptions) {
    echo
    '<span class="Question SelectBox">
    <span class="qnum noshow"></span>
    <span class="qtext">Option</span>
    <span class="shown">
     <select class="combobox" id="option-' . $sName . '" name="option-' . $sName . '">';

    foreach($aOptions as $aOption) {
        list($sValue, $sOption) = $aOption;
        echo '<option name="'. $sName . '" value="' . $sValue . '">' .
             $sOption . '</option>';

     echo"</select>
     </span>
     </span>
     <span class='clearfix'></span>";
}

答案 1 :(得分:0)

您需要嵌套foreach循环。用于创建下拉列表的外部循环和用于创建选项的内部循环:

foreach ($dropdowns as $options) {
    echo "<select ....>";
    foreach ($options as $option) {
        echo "<option>$option</option>";
    }
    echo "</select>
}

防止XSS攻击!