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