質問

PHPを使用して以下のデータを解析するのに苦労しています。API はそれを返します。さまざまな構文を試しました。オブジェクト以外の方法でデータを返すにはどうすればよいですか?または、stdClass を使用してデータを呼び出すための構文は何ですか?

これを 1 つのデータベースの配列、あるいは 2 つに変換できますか?オブジェクトベースのデータセットのことになると迷ってしまいます。

stdClass Object
(
    [0] => stdClass Object
        (
            [district] => stdClass Object
                (
                    [state] => NY
                    [number] => 29
                )

        )

    [1] => stdClass Object
        (
            [district] => stdClass Object
                (
                    [state] => NY
                    [number] => 26
                )

        )

)

自分でオブジェクトを作成し、var_dump を実行すると、次のようになります。

object(stdClass)#8 (2) {
  [0]=>
  object(stdClass)#4 (1) {
    ["district"]=>
    object(stdClass)#5 (2) {
      ["state"]=>
      string(2) "NY"
      ["number"]=>
      string(2) "29"
    }
  }
  [1]=>
  object(stdClass)#6 (1) {
    ["district"]=>
    object(stdClass)#7 (2) {
      ["state"]=>
      string(2) "NY"
      ["number"]=>
      string(2) "26"
    }
  }
}
役に立ちましたか?

解決

おそらくコード内で配列をオブジェクトにキャストしていると思われます ($object = (object) $array)。これには、(オブジェクトのデフォルトと同様に) 今後参照によって渡されるという利点がありますが、オブジェクトがまったく役に立たないという欠点があります (メンバーは数字で始めることができません - を参照してください)。 PHP ドキュメントの正規表現) キャストバックするまで (PHP では非常に不可解なことがいくつか許可されています):

$array = (array) $bogusObject;
$array[0]->district->state === 'NY';

他のヒント

使用します。

$object->{'0'}->district->state

基本的にはあなただ短いカット、その後、変数に文字列を割り当て、オブジェクトのアクセサとしてその変数を使用します。

$zero = "0";
$object->$zero; /* or */ $object->{$zero};

れないのでそのコードは、残念ながら、彼らに晒されていないオプションにそのクラスのお申込としてのデータの連想配列のツリー vs a stdClassオブジェクトです。

の"問題"がライン96 class.sunlightlabs.php

return json_decode( $data );

います。

  1. いただけます。stdClass構文です。
  2. の変換、返されるstdClassツリーを連想配列の一

#1ョン

// echo the state of the 2nd object in the result
echo $result->{0}->district->state;

#2アクショ

$result = toArray( $result );

function toArray( $data )
{
  if ( is_object( $data ) )
  {
    $data = get_object_vars( $data );
  }
  return is_array($data) ? array_map(__FUNCTION__, $data) : $data;
}

きもとにクラスを直接経由の一部創造用パターンも利sublcassesている複雑なものになっているのも少ないこだわりのこの二つのソリューション。

あなたはこのようなオブジェクトを反復処理することができます

foreach ($obj as $each) {
    echo $each->district->state . ' - ' . $each->district->number . '<br />';
}

ユーザーのヌルはコメントでこれを提案したが、それはそうイースリー逃していないので、それをここに載せていきたいと思います。

最良の選択肢は、連想配列の代わりにクラスを返すことができるjson_decodeすなわちのjson_decode($データ、TRUE)の中の第二のparamとしてTRUE渡すことです。だから、あなたがソースコードにアクセスしている場合 - 。そのメイクを変更

soulmergeからこのソリューションは、ちょうど私のために罰金を働います:

$array = (array) $bogusObject;
$array[0]->district->state === 'NY';

どうもありがとう!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top