A->b->c
存在するc
かもしれないが、存在しないかもしれない。どうすれば確認できますか?
17 に答える
これをラップしたほうがいいかもしれませんisset()
if(isset($A->b->c)) { // c exists
そのように、$A
または$A->b
存在しない場合... 爆発しません。
SimpleXML は常にオブジェクトを返します。子がない場合は、空のオブジェクトが返されます。
if( !empty($a->b)){
var_dump($a->b);
}
children()
関数を使用してcount()
それを実行し、count-call の前に @ を付けて子がない場合は PHP エラーを無視して解決しました。これはばかげていますが、機能します:
$identification = $xml->identification;
if (@count($identification->children()) == 0)
$identification = $xml->Identification;
私はこれが嫌い..
いくつかの実験の後、ノードが存在するかどうかを確認する唯一の信頼できる方法は を使用することであることがわかりましたcount($xml->someNode)
。
ここにテストケースがあります: https://gist.github.com/Thinkscape/6262156
PHP 5.3 を使用している場合は、そのまま使用できます$a->count()
。それ以外の場合は、 scippie を使用したソリューション@count($a->children())
がうまく機能します。@ は必要ありませんが、古い PHP 実装では必要になる場合があります。
使用するif(isset($A->b){
と問題が発生したので、試してみる
if($A->b){
とうまくいきました!
PHP 5.5.23 での動作を確認できる 3 つの方法は、isset()
count()
またはempty()
それぞれの結果を表示するスクリプトを次に示します。
名前空間
XML ファイルで名前空間を使用している場合は、子をチェックするときにそれらを関数呼び出しに含める必要があることに注意してください。そうしないと、毎回 0 が返されます。
if ($XMLelement->children($nameSpace,TRUE)->count()){
//do something here
}
あなたは試すことができます:
if($A->b->c && $A->b->c != '')
if($A->b->c != null) //c exists
c
が存在しない場合、その値は になります(null
より正確には、値はありません)。ただし、これが機能するためには、 と の両方がA
でb
ある必要はないことに注意してくださいnull
。そうしないと、PHP がエラーをスローします (私はそう思います)。