私はここで本当に明白な何かが欠けていると思いますが、誰かが私が次のvarダンプで期待する出力ではなく、私が出力を取得している理由を説明できますか?
元のxmlは次のとおりです。
<result>
<category>
<id>3</id>
<name>Category 1</name>
<subcategory>
<id>9</id>
<name>SubCat 1</name>
</subcategory>
<subcategory>
<id>10</id>
<name>SubCat 2</name>
</subcategory>
<subcategory>
<id>11</id>
<name>SubCat 3</name>
</subcategory>
</category>
</result>
私がしていること:
$xml = new SimpleXMLElement($file);
foreach($xml->category as $node)
{
echo "dump 1:
";
var_dump($node);
echo "**********************************************
dump 2:
";
var_dump($node->subcategory);
die();
}
これは以下を出力します:
dump 1:
object(SimpleXMLElement)#130 (3) {
["id"]=>
string(1) "3"
["name"]=>
string(10) "Category 1"
["subcategory"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
}
**********************************************
dump 2:
object(SimpleXMLElement)#138 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
最初のvardumpは私が期待するものを出力しますが、2番目のvar_dumpに期待する出力は次のようになります。
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
または、すべての配列項目を含むオブジェクトですら。なぜそうではないのですか?
見つかった最初の「サブカテゴリ」ノードをダンプしていると呼び出すvar_dump($node->subcategory)
とわかりますが、なぜ最初の変数ダンプの配列にすべての「サブカテゴリ」ノードをキャストしますが、2番目のノードはキャストしませんか?そして、この動作を模倣して、「サブカテゴリ」に複数のオブジェクトが含まれているかどうかを検出するにはどうすればよいですか(最初のvarダンプの場合と同様)。
基本的に私がやろうとしているのは、SimpleXMLElementのプロパティにさらに多くの値の配列が含まれているかどうかを検出することです(つまり、子ノードが含まれている場合)
すべての種類を試しましたが、simpleXmlオブジェクトのプロパティの1つに配列のセットが含まれているかどうかを検出できないようです。
アップデート:
私はこれがうまくいくことを発見しました:
if(count($node->subcategory)>1)
{
// we have more than one subcategory
}
しかし、それは最もエレガントな方法ではありません、私はよりクリーンな方法があるに違いないと確信していますか?