xpath式を使用してforeachループを置き換えますが、複数のリストを返すにはDOMXPathオブジェクトが必要です。DOMXPathを使用してforeachループをXPath式に置き換えます。
私は、次のXML(簡体字)を持っていると私はそれを反復するためにDOMDocumentとDOMXPathを使用して:
<a:RoomsType>
<a:Rooms>
<a:Room>
<a:RPH>0</a:RPH>
</a:Room>
<a:Room>
<a:RPH>1</a:RPH>
</a:Room>
<a:Room>
<a:RPH>2</a:RPH>
</a:Room>
<a:Room>
<a:RPH>0</a:RPH>
</a:Room>
<a:Rooms>
<a:RoomsType>
私はRPH番号で部屋を分割したい、各RPH番号の部屋のリストを作成します。現在、私は次のコードを使用しています:
//$xpath is a DOMXPath object
$roomsToIterate = $this->xpath->query("//a:RoomsType/a:Rooms/a:Room");
$roomList = array();
foreach ($roomsToIterate as $room) {
$rphCandidate = $room->getElementsByTagName("RPH")->item(0)->nodeValue;
if (!isset($roomList[$rphCandidate])) {
$roomList[$rphCandidate] = array();
}
$roomList[$rphCandidate][] = $room;
}
これは現在作業中ですが、私はforeachループをXpath式に置き換えたいと考えています。 $rooms = $this->xpath->query("//a:RoomsType/a:Rooms/a:Room[a:RPH='{$rph}']");
の数字を$rph
とすると数字が使えますが、RPHがわからないとどうすればいいですか(0から99の間であれば何でも構いません)。出来ますか?
つまり、XPathを使って私のforeachループを置き換える方法はありますか?
一部に彼らができる、私はregisterPhpFunctionsの使用およびカスタム関数を考えていたが、私は
いいえ、まだ 'foeach'が必要です。グループをフェッチするには、ネストされた結果または可能な$ rph値を作成するためにルームを反復処理する必要があります。 – ThW
ご意見ありがとうございます。だから私は私の元のアプローチにぴったりだった。私は改善のための新しいアイデアのためにこの質問を開いたままにしておきますが、あなたが望むならあなたのコメントを回答として投稿することができます。新しい提案がない場合は、正しいとマークします。 – James