我尝试使用数组中的select
来创建option
标记。我按如下方式从XML创建数组:
foreach( $xml->children() as $key => $value ) {
$nodes = array();
foreach( $value->children() as $k => $v ) {
$nodes[ ( string ) $v->getName() ] = ( string ) $v;
}
$node = ( string ) $value->getName();
$xml2Array[ $node ][] = $nodes;
}
$data['item'] = $xml2Array;
然后我得到这个数组:
Array
(
[Item] => Array
(
[0] => Array
(
[ItemCode] => 0002684
[MainUOMCode] => PAIR
[ItemName] => SHOES (8623; PINK)
)
[1] => Array
(
[ItemCode] => 0003062
[MainUOMCode] => PAIR
[ItemName] => SHOES (8625; PINK)
)
[2] => Array
(
[ItemCode] => 0003116
[MainUOMCode] => PAIR
[ItemName] => SHOES (8624; RED)
)
[3] => Array
(
[ItemCode] => 0003125
[MainUOMCode] => PAIR
[ItemName] => SHOES (8624; YELLOW)
)
我想用数组项填充select
option
:
<select class="form-control js-example-diacritics">
<option></option>
<?php foreach ($item as $key => $arr){ ?>
<option value="<?=$arr['ItemCode'];?>"><?=$arr['ItemName'];?></option>
<?php } ?>
</select>
但上面的代码失败了:
<p>Severity: Notice</p>
<p>Message: Undefined index: ItemCode</p>
<p>Filename: mutasi_antarserver/add_dagang.php</p>
<p>Line Number: 161</p>
请帮我修理一下。
答案 0 :(得分:0)
试试这个:
$data['item'] = $xml2Array;
echo '<select class="form-control js-example-diacritics">';
foreach($data['item'] as $item)
{
echo '<option value="'.$item['ItemCode'].'">'.$item['ItemName'].'</option>';
}
echo '</select>';
答案 1 :(得分:0)
我认为如果您使用的是Codeigniter,请尝试
<select class="form-control js-example-diacritics">
<option></option>
<?php foreach ($item['Item'] as $key => $arr){ ?>
<option value="<?=$arr['ItemCode'];?>"><?=$arr['ItemName'];?></option>
<?php } ?>
</select>
答案 2 :(得分:0)
您可能正在使用SimpleXML扩展(从使用children()
方法的方式来看很明显。)
SimpleXMLElement
由于SimpleXMLElement
实现了Traversable
接口,您可以简单地迭代该对象以获取子项。此外,可以访问SimpleXMLElement
的子项作为对象属性,即使用->
运算符。
示例强>
<?php
$xml = <<<'XML'
<root>
<Item>
<ItemCode>00002345</ItemCode>
<MainUOMCode>PAIR</MainUOMCode>
<ItemName>SHOES (...)</ItemName>
</Item>
<Item>
<ItemCode>032434</ItemCode>
<MainUOMCode>XPAIR</MainUOMCode>
<ItemName>SHOESxxx (...)</ItemName>
</Item>
</root>
XML;
echo '<select class="form-control js-example-diacritics">', PHP_EOL;
$items = simplexml_load_string($xml);
foreach ($items as $item) {
echo '<option value="', $item->ItemCode, '">',
$item->ItemName, '</option>', PHP_EOL;
}
echo '</select>';
输出
<select class="form-control js-example-diacritics">
<option value="00002345">SHOES (...)</option>
<option value="032434">SHOESxxx (...)</option>
</select>
但是如果你坚持使用children()
方法和数组语法,你可以将SimpleXMLElement
强制转换为数组:
foreach ($items->children() as $item) {
$item = (array) $item;
echo '<option value="', $item['ItemCode'], '">',
$item['ItemName'], '</option>', PHP_EOL;
}
顺便说一下,你的代码失败了,因为你试图以数组形式访问对象,而对象(SimpleXMLElement
)没有实现ArrayAccess
或ArrayObject
注意,您应该使用htmlspecialchars()
函数转义HTML内容。