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 返回此警告:

注意:未定义的索引:第 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);
        }

看看我是否能识别出一段防御数据,但它永远不会消失。那么到底发生了什么?!(我有一个偷偷摸摸的怀疑,答案会很简单。)

4

2 回答 2

3

知道将 PHP 中的任何数组转换为字符串都会导致字符串的事实,该错误更容易理解:

"Array"

(这也在PHP 手册中的Type Juggling中进行了概述)

正是这发生在第 40 行:

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

此时的变量$category_id是一个数组。修复它。有效的数组索引/键是整数或字符串,但不是数组。

于 2012-12-20T22:33:37.280 回答
0

foreach循环中,语法foreach($categories_array as $k=>$category_id) {意味着,$kkey并且$category_idvalue每个索引/键。因此,该数组没有将其值之一作为索引的值,这就是错误显示undefined index的原因。

由于$category_id不是一个数组,它的值为 2,它没有通过检查if (is_array($category_id))

于 2012-12-20T22:33:28.513 回答