所以,假设我有一个像这样的XML文件
<allAnimals>
<animal>
<aniID>1</aniID>
<name>Joo</name>
</animal>
<animal>
<aniID>2</aniID>
<name>Moo</name>
</animal>
<animal>
<aniID>1</aniID>
<name>Foo</name>
</animal>
</allAnimals>
我需要将其设置为一个下拉列表,其中显示的值是动物名称,但按字母顺序排列,与该显示值相关联的值是动物ID。
在我看来,我应该能够做到这样的事情:
<?php
$xml=simplexml_load_file("animal.xml")
$animalArray = array();
foreach($xml->animal as $child)
{
$animalArray[$child->name]= $child->aniID;
}
ksort($animalArray);
$page.="<Select>";
foreach($animalArray AS $key=>$value)
{
$page.='<option value="'.$value.'">'.$key."</option>";
}
return $page;
?>
更新
所以这就是我现在所拥有的
$xml = simplexml_load_file("animal.xml");
$animals = array();
foreach($xml->organization as $child) {
$animals[] = array('id' => $child->aniID, 'name' => $child->Name);
}
$page.="<select>";
foreach($animals AS $aniId=>$name)
{
$page.='<option value="'.$aniId.'">'.$name."</option>";
}
$page.="</select>";
现在让我们不要担心排序,因为现在我在选择列表中的所有内容都是 “阵列” “阵列” “阵列”
答案 0 :(得分:3)
很难说出你的期望,但我认为你可能正在寻找这个:
foreach($xml->animal as $child)
{
$animalArray[$child->Name] = $child->aniID;
}
也就是说,如果你想$ animalArray看起来像这样:
array(
"Joo" => 1,
"Moo" => 1,
"Foo" => 1,
)
答案 1 :(得分:1)
您没有正确分配数组元素。试试这个:
foreach($xml->animal as $child)
{
$animalArray[$child->Name] = $child->aniID;
}
答案 2 :(得分:1)
试试这个:
foreach($xml->animal as $child) {
// cast to integer to prevent SimpleXmlElement being used as key
$aniID = (int) $child->aniID;
$animalArray[$aniID] = (string) $child->Name;
}
// sort by value
asort($animalArray);
我在这里假设'aniID'是唯一的,'name'可能不是唯一的,因此我选择aniID作为我的关联数组的关键
然后输出结果
foreach($animalArray AS $aniId=>$name)
{
$page.='<option value="'.$aniId.'">'.$name."</option>";
}
[更新] 添加了强制转换以防止使用SimpleXml对象而不是值
答案 3 :(得分:0)
如果您尝试向accociative array添加新索引,请使用以下代码
foreach($xml->animal as $child)
{
$animalArray[$child->Name] = $child->aniID;
}
答案 4 :(得分:0)
查看一下usort函数:http://php.net/manual/en/function.usort.php
$xml = simplexml_load_file("animal.xml");
$animals = array();
foreach($xml->animal as $child) {
$animals[] = array('id' => $child->aniID, 'name' => $child->Name);
}
usort($animals, function($a, $b) { return strcoll($a['name'], $b['name']); });
// Now $animals are sorted by name.
答案 5 :(得分:0)
小offtopic:附加到字符串是非常慢的操作。使用输出缓冲区和回声要快得多。见http://php.net/manual/en/function.ob-start.php