这让我很疯狂,因为我需要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]
传递的$ category是一个category_ids字符串(关于为什么是这样的长篇故事)
getFileCats()方法获取所有可用类别的列表。
因此我们爆炸commad列表来创建一个数组,然后我们循环遍历该数组。当我给出一串类别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)
$ cats:
数组([9] =>类别19 [8] =>类别8 [7] =>类别7 [6] =>我为隐私更改的另一个字符串[5] => AED销售[ 4] => Preceptor Folder [3] =>教育手册[2] =>表格[1] =>指南和政策)
$猫[$ 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);
}
看看我是否可以识别出一块防御数据,但它永远不会消亡。那到底是怎么回事?! (我有一种偷偷摸摸的怀疑,答案是前额 - 简单。)
答案 0 :(得分:3)
错误更容易理解,因为将PHP中的任何数组转换为字符串会产生字符串:
"Array"
(这也在PHP手册的Type Juggling中列出)
正好在第40行发生:
$file_cats_string .= $cats[$category_id] . ', ';
^^^^^^^^^^^^
此时的变量$category_id
是一个数组。修复它。有效的数组索引/键是整数或字符串,但不是数组。
答案 1 :(得分:0)
在foreach
循环中,语法foreach($categories_array as $k=>$category_id) {
表示$k
为key
,$category_id
为每个索引/密钥value
。因此,数组没有一个值,其值为索引,这就是错误 undefined index 的原因。
由于$category_id
不是数组,并且其值为2,因此它不会通过if (is_array($category_id))