64

A->b->c存在するcかもしれないが、存在しないかもしれない。どうすれば確認できますか?

4

17 に答える 17

130

これをラップしたほうがいいかもしれませんisset()

if(isset($A->b->c)) { // c exists

そのように、$Aまたは$A->b存在しない場合... 爆発しません。

于 2009-10-13T18:41:21.400 に答える
40

SimpleXML は常にオブジェクトを返します。子がない場合は、空のオブジェクトが返されます。

if( !empty($a->b)){
  var_dump($a->b);
}
于 2011-03-17T20:03:04.357 に答える
8

children()関数を使用してcount()それを実行し、count-call の前に @ を付けて子がない場合は PHP エラーを無視して解決しました。これはばかげていますが、機能します:

$identification = $xml->identification;
if (@count($identification->children()) == 0)
  $identification = $xml->Identification;

私はこれが嫌い..

于 2010-11-24T15:11:52.567 に答える
7

いくつかの実験の後、ノードが存在するかどうかを確認する唯一の信頼できる方法は を使用することであることがわかりましたcount($xml->someNode)

ここにテストケースがあります: https://gist.github.com/Thinkscape/6262156

于 2014-04-10T12:52:08.123 に答える
4

PHP 5.3 を使用している場合は、そのまま使用できます$a->count()。それ以外の場合は、 scippie を使用したソリューション@count($a->children())がうまく機能します。@ は必要ありませんが、古い PHP 実装では必要になる場合があります。

于 2011-03-23T23:05:59.680 に答える
2

使用するif(isset($A->b){ と問題が発生したので、試してみる if($A->b){ とうまくいきました!

于 2012-06-06T12:49:51.147 に答える
1

PHP 5.5.23 での動作を確認できる 3 つの方法は、isset() count()またはempty()

それぞれの結果を表示するスクリプトを次に示します。

https://gist.github.com/mchelen/306f4f31f21c02cb0c24

于 2015-04-15T18:43:09.837 に答える
0

名前空間

XML ファイルで名前空間を使用している場合は、子をチェックするときにそれらを関数呼び出しに含める必要があることに注意してください。そうしないと、毎回 0 が返されます。

if ($XMLelement->children($nameSpace,TRUE)->count()){
    //do something here 
}
于 2014-10-01T17:26:55.267 に答える
-2

あなたは試すことができます:

if($A->b->c && $A->b->c != '')
于 2011-06-21T16:08:37.903 に答える
-26
if($A->b->c != null) //c exists

cが存在しない場合、その値は になります(nullより正確には、値はありません)。ただし、これが機能するためには、 と の両方がAbある必要はないことに注意してくださいnull。そうしないと、PHP がエラーをスローします (私はそう思います)。

于 2009-10-13T15:17:17.823 に答える