将选项值转换为数组


Turn option value into an array

我正在使用foreach循环创建一个选择表单,如下所示:

$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';
$decode = json_decode($json, false);
echo'<select>';
foreach($decode as $key) {
   echo '<option value="'.$key->Name.'"></option>';
}
echo'</select>';

这将显示以下HTML:

<select>
   <option value="Jim">
   <option value="Bob">
</select>

如何创建一个具有所有option值的数组,如以下所示:

$array = array('Jim', 'Bob');

最好的方法是在php中的一个数组中定义您的选项,并将该数组显示为页面中的选项。

使用loadHTMLFile读取html元素。将html存储在文件中,比如filename.html

filename.html 内部

<select>
   <option value="1">
   <option value="Bob">
   <option value="2343">
</select>

并将该文件称为

$doc = new DOMDocument();
$doc->loadHTMLFile("filename.html");
//echo $doc->saveHTML();
$elements = $doc->getElementsByTagName('option');
$array = [];
if (!is_null($elements)) {
    //print_r($elements);
    foreach ($elements as $element) {
        // echo "<br/>". $element->nodeName. ": ";
        $array[] = $element->getAttribute('value');
    }
}
print_r($array);

更新

 $json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';
$decode = json_decode($json, false);
$str="";
echo'<select>';
foreach($decode as $key) {
   echo $xml = '<option value="'.$key->Name.'"></option>';
   $str.=$xml;
}
echo'</select>';
$doc = new DOMDocument();
$doc->loadHTML($str);
//echo $doc->saveHTML();
$elements = $doc->getElementsByTagName('option');
$array = [];
if (!is_null($elements)) {
    //print_r($elements);
    foreach ($elements as $element) {
        // echo "<br/>". $element->nodeName. ": ";
        $array[] = $element->getAttribute('value');
    }
}
print_r($array);

首先,您破坏了HTML字符串:是否为每个<option>都有</option>标记?

如果你有,试试这个:

<?php
$xml = '<select>
   <option value="1"></option>
   <option value="Bob"></option>
   <option value="2343"></option>
</select>';
$dom = new DOMDocument;
$dom->loadXML($xml);
$values = array();
foreach ($dom->getElementsByTagName('option') as $option) {
  $values[] = $option->getAttribute('value');
}
print_r($values);