0

我正在编写一个使用大量下拉框的数据网格小部件,例如。有这个标记:

<select name="users">
    <option value="1">Mark</option>
    <option value="2">Jen</option>
    <option value="3">John</option>
</select>

我已经将此标记存储到一个变量中,我想知道是否可以通过 php 设置当前值?所以这是经典的字符串操作——但我不想使用像简单的 dom 解析器这样的库。有什么想法吗?谢谢

4

7 回答 7

1
$array[1] = 'Mark';
$array[2] = 'Jen';
$array[3] = 'John';
$select = "<select>\n";
foreach ($array as $key => $value){
    $select .= "\t<option value='".$key."'>".$value."</option>\n";
}
$select .= "</select>\n";
echo $select;

输出:

<select>
    <option value='1'>Mark</option>
    <option value='2'>Jen</option>
    <option value='3'>John</option>
</select>
于 2013-08-02T09:10:31.767 回答
1

最好的方法可能是创建一个函数,使用提供的选项数组和第二个参数为您解析下拉列表,该参数指示默认选择哪一个。

但是,您也可以使用str_replace()查找具有特定值的行并将selected属性添加到其中。

于 2013-08-02T09:13:03.220 回答
0

这是你想做的吗?

function renderSelector($attr=array(),$options=array(),$selected=''){
    if(@count($attr))
        foreach($attr as $k=>$v) $attr[$k] = $k.'="'.htmlentities($v).'"';
    if(@count($options))
        foreach($options as $k=>$v) $options[$k] = '<option value="'.htmlentities($k).'" '.(($k==$selected)?'selected':'').'>'.$v.'</option>';

    return $str = '<select '.implode(' ',$attr).'>'.implode('',$options).'</select>';
}

echo renderSelector(
        $attr=array('name'=>'city'),
        $options=array('NY'=>'Newyork','TK'=>'Tokyo','3'=>'London'),
        $selected='TK'
     );

演示

于 2013-08-02T09:19:34.353 回答
0

Tho,DOMDocument或者SimpleXML会适合这个完美,这里有你的解决方案:

$selected = 'Option 1';
$options  = array('Option 1', 'Test', 'Blargh', 'Lazr');

$select = "<select name='select1'>\n";
foreach ($option as $key => $val)
    $select = "<option value='{$key}'";
    if ($val === $selected) {
        $select .= " selected='selected'";
    }
    $select .= ">{$val}</option>\n";
}

$select .= "</select>\n";

echo $select;
于 2013-08-02T09:16:28.753 回答
0

我假设你想做一些像 jQuery 的$('option[value=2]').attr('selected', true). PHP 本身不理解您存储在字符串变量中的任何标记。只有 DOM 解析器才有可能。

    $template = '<select name="users">
             <option value="1">Mark</option>
             <option value="2">Jen</option>
             <option value="3">John</option>
          </select>';
    $select = simplexml_load_string($template1);
    $selectedValue = "2";
    foreach ($select->children() as $option) {
        if ($option->attributes()->value == $selectedValue) {
            $option->addAttribute('selected', 'selected');
        }
    }
    $template = $select->asXML();
于 2013-08-02T09:22:24.040 回答
0

如果你愿意重新输出 HTML,很容易在一个可理解的数组中预选一个值(值是键,文本是$selectKVP 的值):

<?php
    $select = array(
        'mark' => 'Mark',
        'jen'  => 'Jen',
        'john' => 'John'
    );
    $preSelected = 'jen';

    echo '<select>';
    foreach ($select as $key => $value) {
        echo '<option value="' . $key . '"' . ($key == $preSelected ? ' selected="SELECTED"' : '') . '>' . $value . '</option>';
    }
    echo '</select>';
?>

键盘演示

输出(带缩进):

<select>
    <option value="mark">Mark</option>
    <option value="jen" selected="SELECTED">Jen</option>
    <option value="john">John</option>
</select>
于 2013-08-02T09:17:59.857 回答
0

你的意思是,

$template1 = '<select name="users">
                 <option value="1">Mark</option>
                 <option value="2">Jen</option>
                 <option value="3">John</option>
              </select>';

然后在用于构建 HTML 页面的代码中

<div><?php echo $template1; ?></div>

或者

echo '<div>' . $template1 . '</div>';
于 2013-08-02T09:08:31.047 回答