ホームページ  >  に質問  >  本文

PHP - 要素の値が文字列型でない場合、オブジェクトの走査が失敗する

<p>素朴な疑問なのですが、どうしても何が起こっているのか分かりません。次のような JSON 文字列があります: </p> <pre class="brush:php;toolbar:false;">{ "network_title": "ネットワーク", "class_title": "クラス", 「成績」: [{ "number": "Pre-K", "label": "幼稚園前", 「順序」: 1、 "id": "34567" }、{ "番号": "TK", "label": "移行期幼稚園", 「順序」: 2、 "id": "23456" }、{ "番号": "K"、 "ラベル": "幼稚園", 「順序」: 3、 "id": "12345" }] }</pre> <p>これは (特定の理由により) 次のような配列に変換されます。 </p> <pre class="brush:php;toolbar:false;">array:3 [ "network_title" => "ネットワーク" "class_title" => "クラス" "成績" => 配列:3 [ 0 => 配列:4 [ 「番号」 => 「幼稚園」 "label" => "幼稚園前" 「注文」 => 1 "gid" => "aa71da69-93ab-11e9-bda9-06f442b19d06" 】 1 => 配列:4 [ 「数字」=>「TK」 "label" => "移行期幼稚園" 「注文」 => 2 "gid" => "d3c6754a-6298-48d0-9afa-6a19bafb8464" 】 2 => 配列:4 [ 「数字」=>「K」 "ラベル" => "幼稚園" 「注文」 => 3 "gid" => "a815a771-9aff-4020-b7d2-0c95a05da21e" 】 】 ]</pre> <p>次に、配列を反復処理しようとします。文字列型ではない要素 (order 要素など) が見つかると、foreach() エラーで Invalid argument provided が返されます。エラー メッセージには、foreach() 行に問題があることが示されています。コード例は次のとおりです: </p> <pre class="brush:php;toolbar:false;">foreach ($arrTree as $k => $v) { if (is_string($v)) { //ここで何かをする } }</pre> <p>ここで基本的なことが欠けていると思いますが、問題を探すのは疲れました。ありがとう。 </p>
P粉769045426P粉769045426468日前523

全員に返信(1)返信します

  • P粉615886660

    P粉6158866602023-07-31 15:41:35

    問題は、$arrTree が多次元配列であることです。

    コード内の foreach ループは、配列の最初のレベルのみを走査しますが、入れ子になった配列 (「グレード」など) は走査しません。 「grades」に遭遇すると、$v の値は文字列ではなく配列であるため、is_string($v) チェックは失敗します。

    この構造を処理するには、ネストされた foreach ループを追加する必要があります。

    これを実現する方法を示す例は次のとおりです:

    リーリー

    返事
    0
  • キャンセル返事