0

それで、私がこのような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>";

選択リストに表示されるのは「array」「array」「array」だけなので、今は並べ替えについて心配する必要はありません。

4

6 に答える 6

2

あなたが何を期待しているのかを知るのは難しいですが、私はあなたがこれを探しているかもしれないと思います:

foreach($xml->animal as $child)
{
    $animalArray[$child->Name] = $child->aniID;
}

つまり、$ animalArrayを次のように表示する場合は、次のようになります。

array(
    "Joo" => 1,
    "Moo" => 1,
    "Foo" => 1,
)
于 2013-01-29T23:52:04.493 に答える
1

配列要素を正しく割り当てていません。これを試して:

foreach($xml->animal as $child)
 {
   $animalArray[$child->Name] = $child->aniID;
 }
于 2013-01-29T23:52:27.580 に答える
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オブジェクトが使用されないようにするキャストを追加しました

于 2013-01-29T23:53:28.280 に答える
0

連想配列に新しいインデックスを追加しようとする場合は、次のコードを使用してください

foreach($xml->animal as $child)
{
   $animalArray[$child->Name] = $child->aniID;
}
于 2013-01-29T23:52:07.683 に答える
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.
于 2013-01-29T23:59:00.050 に答える
0

少しオフトピック: 文字列への追加はかなり遅い操作です。出力バッファとエコーを使用すると、はるかに高速になります。http://php.net/manual/en/function.ob-start.phpを参照してください。

于 2013-01-30T00:37:03.670 に答える