2017-09-27 10 views
-1

jsonオブジェクトの配列をhtmlリストにデコードしています。私はいくつかのデモを試してみましたが、このjson配列を処理すると、次のようなエラーが発生します。foreach()に無効な引数が渡されました。私は何が足りないのですか?jsonオブジェクトの配列のforeach()エラーの引数が無効です

<?php 
$json_string = '{"error":false,"data":[{"jb_product_category_id":"1","jb_product_category_name":"Mother","jb_product_category_prefix":"jbpm","jb_product_category_delete_status":"0","jb_product_category_created_on":"1501500876531","jb_product_category_updated_on":"1501500876531","subCategory1":[{"jb_product_subcategory1_1_id":"1","jb_product_subcategory1_2_category_id":"1","jb_product_subcategory1_3_name":"Cloths","jb_product_subcategory1_4_delete_status":"0","jb_product_subcategory1_5_created_on":"1501563015164","jb_product_subcategory1_6_updated_on":"1501563015164","subCategory2":[{"jb_product_subcategory2_1_id":"1","jb_product_subcategory2_2_category_id":"1","jb_product_subcategory2_3_subcategory1_id":"1","jb_product_subcategory2_4_name":"Pregnancy wear","jb_product_subcategory2_5_delete_status":"0","jb_product_subcategory2_6_created_on":"1501574226464","jb_product_subcategory2_7_updated_on":"1501574226464"}]}]},{"jb_product_category_id":"2","jb_product_category_name":"Child Wear","jb_product_category_prefix":"jbpc","jb_product_category_delete_status":"0","jb_product_category_created_on":"1502429483534","jb_product_category_updated_on":"1502429483534","subCategory1":[{"jb_product_subcategory1_1_id":"2","jb_product_subcategory1_2_category_id":"2","jb_product_subcategory1_3_name":"Girls","jb_product_subcategory1_4_delete_status":"0","jb_product_subcategory1_5_created_on":"1502429606169","jb_product_subcategory1_6_updated_on":"1502429606169","subCategory2":[{"jb_product_subcategory2_1_id":"2","jb_product_subcategory2_2_category_id":"2","jb_product_subcategory2_3_subcategory1_id":"2","jb_product_subcategory2_4_name":"Western","jb_product_subcategory2_5_delete_status":"0","jb_product_subcategory2_6_created_on":"1502429794573","jb_product_subcategory2_7_updated_on":"1502429794573"}]},{"jb_product_subcategory1_1_id":"3","jb_product_subcategory1_2_category_id":"2","jb_product_subcategory1_3_name":"Boys","jb_product_subcategory1_4_delete_status":"0","jb_product_subcategory1_5_created_on":"1505105190176","jb_product_subcategory1_6_updated_on":"1505105190176","subCategory2":[]}]}]}'; 

    $array = json_decode($json_string, true); 
    function build_list($array) { 
    $list = '<ul>'; 
    foreach($array as $key => $value) { 
    foreach($value as $key => $index) { 
    if(is_array($index)) { 
     $list .= build_list($index); 
     } else { 
     $list .= "<li>$index</li>"; 
     } 
    } 
    } 

     $list .= '</ul>'; 
    return $list; 
     } 

echo build_list($array); 
    ?> 
+1

$キーは、2回使用されますが、別の変数名を使用plzはすることができます。また、デコーディング後に正しい配列が得られているかどうかを確認してください。ただ、foreachの($キー=> $値として$配列){ \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t foreachの($キー1として$値=として、私はこれを作る –

+0

を確認するために、 > $ index){ただし変更はありません。 –

+0

確かにわかりませんが、$ valueも配列であることを確認してください。あるいは、foreach変数ではない配列をgetitngしているかどうかを確認してください。 –

答えて

1

単純に一つだけのforeachを使用して、ネストされた一つが役に立たないようだ:

foreach($array as $key => $index) { 
    if(is_array($index)) { 
    /* ... */ 
+0

bravo !!出来た 。どのように私は欲しいだけのリストに特定の値を表示するのですか?例えば、母、布? –

0

$valueが有効な配列であるかどうかだけをチェックするための条件を追加します。この方法では、配列でなく警告が消える場合は$valueを処理しません。

if (!is_array($value)) { 
     continue; 
    } 

ループ$arrayforeachの内側に、この条件を使用してください。

foreach($array as $key => $value) { 
    if (!is_array($value)) { 
     continue; 
    } 

    foreach($value as $k => $index) { 
    if(is_array($index)) { 
     $list .= build_list($index); 
     } else { 
     $list .= "<li>$index</li>"; 
     } 
    } 
} 

Ideoneリンク:Code

関連する問題