未定义的索引:Array,定义索引时

时间:2012-12-20 22:30:48

标签: php arrays

这让我很疯狂,因为我需要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);
        }

看看我是否可以识别出一块防御数据,但它永远不会消亡。那到底是怎么回事?! (我有一种偷偷摸摸的怀疑,答案是前额 - 简单。)

2 个答案:

答案 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) {表示$kkey$category_id为每个索引/密钥value 。因此,数组没有一个值,其值为索引,这就是错误 undefined index 的原因。

由于$category_id不是数组,并且其值为2,因此它不会通过if (is_array($category_id))

的检查