これには Xpath を使用します。基本的にはSimpleXML: 特定の属性値を持つ要素の選択で概説されているものとまったく同じですが、あなたの場合、属性値ではなく要素値を決定しています。
ただし、探している両方の要素の Xpath では親です。そのため、xpath 式を定式化するのは簡単です。
// Here we find the item element that has the child <id> element
// with node-value "12437".
list($result) = $data->xpath('(//items/item[id = "12437"])[1]');
$result->asXML('php://output');
出力 (美化):
<item>
<title>title of 12437</title>
<id>12437</id>
</item>
それでは、この xpath クエリの核心をもう一度見てみましょう。
//items/item[id = "12437"]
それは次のように書かれています:値で名前が付けられた子要素を独自に持つ要素<item>
の子であるすべての要素を選択します。<items>
<id>
"12437"
そして今、不足しているものがあります:
(//items/item[id = "12437"])[1]
かっこで囲まれている内容: これらすべての<item>
要素から、最初の 1 つだけを選択してください。構造によっては、これが必要な場合とそうでない場合があります。
したがって、完全な使用例とオンラインデモは次のとおりです。
<?php
/**
* php simplexml get a specific item based on the value of a field
* @lin https://stackoverflow.com/q/17537909/367456
*/
$str = <<<XML
<items>
<item>
<title>title of 43534</title>
<id>43534</id>
</item>
<item>
<title>title of 12437</title>
<id>12437</id>
</item>
<item>
<title>title of 7868</title>
<id>7868</id>
</item>
</items>
XML;
$data = new SimpleXMLElement($str);
// Here we find the item element that has the child <id> element
// with node-value "12437".
list($result) = $data->xpath('(//items/item[id = "12437"])[1]');
$result->asXML('php://output');
したがって、質問のタイトルでフィールドと呼ぶものは、本では子要素です。探しているものを取得するためのより複雑な xpath クエリを検索するときは、このことに留意してください。