这让我发疯,因为我需要 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 返回此警告:
注意:未定义的索引:第 40 行 Documents.php 中的数组
第 40 行是:
$file_cats_string.=$cats[$category_id].', ';
所以显然未定义的索引是 $cats[$category_id]。但这就是奇怪的地方。
如果我使用 die() 语句并回显 $cats[$category_id] 我确实得到了一个字符串,而不是一个数组。
顺便说一句,这里是三个关键数据中每一个的输出,其中 die() 语句放在 foreach 循环的顶部。
$categories_array:
数组( [0] => 2 )
$猫:
数组 ( [9] => 类别 19 [8] => 类别 8 [7] => 类别 7 [6] => 我为隐私更改的另一个字符串 [5] => AED 销售 [4] => Preceptor 文件夹 [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);
}
看看我是否能识别出一段防御数据,但它永远不会消失。那么到底发生了什么?!(我有一个偷偷摸摸的怀疑,答案会很简单。)