1

他の理由でE_ALLをオンにする必要があるため、これは私を夢中にさせています。このバグを取り除くことはできません。

これが私の関数です:

public static function getFileCatsString($categories)
{
    if (empty($categories)) {
        return '';
    }
    $cats = self::getFileCats();

    $file_cats_string = '';
    $categories_array = explode(',',$categories);
    foreach($categories_array as $k=>$category_id) {
        $file_cats_string.=$cats[$category_id].', ';
    }
    $file_cats_string = rtrim($file_cats_string, ', ');
    return($file_cats_string);
}

カテゴリはキー付き配列に格納されます:[id] => [string]

渡される$categoriesはcategory_idsの文字列です(それがなぜであるかについての長い話)

getFileCats()メソッドは、使用可能なすべてのカテゴリのリストを取得します。

したがって、コンマリストを分解して配列を作成し、その配列をループします。カテゴリIDの文字列が与えられたときに、カテゴリラベルの文字列を作成したいだけです。PHPはこの警告を返します:

注意:未定義のインデックス:Documents.phpの40行目の配列

40行目は次のとおりです。

      $file_cats_string.=$cats[$category_id].', ';

したがって、明らかに未定義のインデックスは$ cats[$category_id]です。しかし、ここでそれは奇妙になります。

die()ステートメントを使用して$ cats [$ category_id]をエコーアウトすると、実際には配列ではなく文字列が取得されます。

ちなみに、これは、foreachループの先頭にdie()ステートメントが配置された3つの主要なデータのそれぞれの出力です。

$ category_array:

配列([0] => 2)

$ cats:

配列([9]=>カテゴリ19[8]=>カテゴリ8[7]=>カテゴリ7[6]=>プライバシーのために変更した別の文字列[5]=>AED販売[4]=>プリセプターフォルダ[3 ]=>教育パンフレット[2]=>フォーム[1]=>ガイドラインとポリシー)

$ cats [$ category_id]

フォーム

$ category_id

2

しかし、それはさらに奇妙になります。インデックスは配列であると書かれているので(これは確かに問題になります)、次のように入力してみました。

        if (is_array($category_id)) {
            die(print_r($categories_array, true) . '<br />' . print_r($cats, true) . '<br />' . $cats[$category_id] . '<br />' . $category_id);
        }

防御データの一部を特定できるかどうかを確認しますが、それが死ぬことはありません。では、一体何が起こっているのでしょうか?!(私は、答えが額をたたくほど単純になるだろうという卑劣な疑いを持っています。)

4

2 に答える 2

3

PHPの配列を文字列に変換すると、次の文字列になるという事実を知っていると、エラーを理解しやすくなります。

"Array"

(これは、PHPマニュアルの型ジャグリングでも概説されています)

まさにそれは40行目で起こります:

$file_cats_string .= $cats[$category_id] . ', ';
                           ^^^^^^^^^^^^

$category_idその時点での変数は配列です。それを修正します。有効な配列インデックス/キーは整数または文字列ですが、配列ではありません。

于 2012-12-20T22:33:37.280 に答える
0

foreachループでは、構文は、、およびがインデックス/キーごとであるforeach($categories_array as $k=>$category_id) {ことを意味します。したがって、配列には、その値の1つをインデックスとして持つ値がありません。そのため、エラーには未定義のインデックスが表示されます。$kkey$category_idvalue

は配列ではなく、値が2であるため$category_id、次のチェックに合格しません。if (is_array($category_id))

于 2012-12-20T22:33:28.513 に答える