0

テキストフィールドにリンクされた、ページの1つの選択メニューで選択するフォントの動的リストを作成しています。

以下のスクリプトを使用すると、これは問題なく動作しますが、テキスト フィールドを空白のままにすると、選択メニューに次のエラー メッセージが表示されます。

警告: 373行 目の/opt.phpの foreach() に無効な引数が指定されまし た

ファイルの/opt.php373 行目:

else {
    foreach ($decode['items'] as $key => $value) {
        $item_family = $decode['items'][$key]['family'];
        $item_family_trunc =  str_replace(' ','+',$item_family);        
        $default[$item_family_trunc] = $item_family;
    }
}       

私は PHP を初めて使用するので、上記のスクリプトを修正して、テキスト フィールドが空白のままになっているときにエラー メッセージが表示されないようにするにはどうすればよいでしょうか?

ありがとうございました。

4

3 に答える 3

2

関数foreachを使用して、ループの引数が配列であることを確認してくださいis_array()

if (isset($decode['items']) && is_array($decode['items'])) {
    foreach ($decode['items'] as $key => $value) {
        $item_family = $decode['items'][$key]['family'];
        $item_family_trunc =  str_replace(' ','+',$item_family);        
        $default[$item_family_trunc] = $item_family;
    }
}
于 2012-12-20T03:32:22.690 に答える
2

if(empty($decode)) {

「アイテム」が設定されているかどうかではなく、$decode が空かどうかのみをチェックしています。

if (!isset($decode['items']) && is_array($decode['items'])) {

うまくいくかもしれません。

また、 foreach ループ内では、配列をトラバースしようとするのではなく、 $value を参照することができます。それで..

$item_family_trunc =  str_replace(' ','+',$value['family']);
于 2012-12-20T03:34:33.527 に答える
2

decode['items']isset が配列であり、空でないことを確認する必要があります。

$decode = json_decode($json, true);
if(empty($decode)) {

}elseif(isset($decode['items']) && !empty($decode['items']) && is_array($decode['items'])){
            foreach ($decode['items'] as $key => $value) {
            $item_family = $decode['items'][$key]['family'];
            $item_family_trunc =  str_replace(' ','+',$item_family);        
            $default[$item_family_trunc] = $item_family;

        }
    }   
}

コードの問題は、 が空でない可能性があること$decode(エラー メッセージなど) であるため、それが利用可能であることを確認する必要$decode['items']があります。

于 2012-12-20T03:36:00.253 に答える