0

私はこれをうまく使っていたので、次のように考えました:

foreach ($trip->STOPS->STOP as $key=>$value) {

ほとんどの場合、データは次のようになります。

  ["STOPS"]=>
  object(stdClass)#247 (1) {
    ["STOP"]=>
    array(4) {
      [0]=>
      object(stdClass)#248 (2) {
        ["NAME"]=>
        string(11) "Short Hills"
        ["TIME"]=>
        string(20) "7/30/2013 6:38:24 AM"
      }
      [1]=>
      object(stdClass)#249 (2) {
        ["NAME"]=>
        string(8) "Millburn"
        ["TIME"]=>
        string(20) "7/30/2013 6:41:24 AM"
      }
      [2]=>
      object(stdClass)#250 (2) {
        ["NAME"]=>
        string(19) "Newark Broad Street"
        ["TIME"]=>
        string(20) "7/30/2013 6:53:00 AM"
      }
      [3]=>
      object(stdClass)#251 (2) {
        ["NAME"]=>
        string(21) "New York Penn Station"
        ["TIME"]=>
        string(20) "7/30/2013 7:13:00 AM"
      }
    }
  }
}

しかし、上記の PHP コードは、STOP に要素の配列が含まれていない場合に問題を引き起こしました。

  ["STOPS"]=>
  object(stdClass)#286 (1) {
    ["STOP"]=>
    object(stdClass)#287 (2) {
      ["NAME"]=>
      string(21) "New York Penn Station"
      ["TIME"]=>
      string(20) "7/30/2013 8:13:00 AM"
    }
  }
}

ご想像のとおり、$key=>$value を配列要素にして NAME/TIME の配列にする代わりに、$key を NAME または TIME にしていましたが、これはもちろん間違っています。

foreach $trip->STOPS->STOP に配列または複数の要素が含まれているかどうかを確認する必要なく、この foreach メソッドを適切に使用するにはどうすればよいですか?

このデータのソースは、JSON として返される SOAP リクエストからのものです。

それとも、ここでの私のアプローチは完全に間違っていますか? もしそうなら、親切に教えてください。ありがとう!

4

2 に答える 2

2

さまざまなタイプの構造を扱っています。それが配列であることを確認する$trip->STOPS->STOPか、それ以外の場合は配列にする必要があります。そのようです:

if (is_array($trip->STOPS->STOP)) {
    $stopArray = $trip->STOPS->STOP;
} else {
    // wrap it in array with single element
    $stopArray = array( $trip->STOPS->STOP );
}
foreach ($stopArray as $key=>$value) {
    // your code...
于 2013-08-01T15:34:58.470 に答える