Laravel:未定义的索引 - 数组键不存在

时间:2012-10-15 15:51:06

标签: php arrays foreach laravel

我一直在研究这个问题几天,我似乎无法弄明白。

我想尝试做一些简单的事情,我想,只是循环一个数组。 这是数组的屏幕截图:http://cl.ly/image/3j2J3x1C3B0j 我正在尝试遍历所有“技能”数组,其中包含“技能”数组,并且内部会抓住“图标”。 为此我做了2个循环:

    foreach ($hero_data['skills'] as $skills)
            {
                foreach ($skills as $skill)
            {
                //print_r($skill['skill']);
            }
    }

不幸的是,这在laravel中不起作用。我收到了“Undefined index:skill”错误。当我在外面尝试它时,它确实有效,作为一个独立的脚本。

在两个循环的外侧,我可以选择带有以下内容的图标:

    print_r($hero_data['skills']['active'][0]['skill']['icon']);

我确定我忽视了一些愚蠢的事情......

非常感谢你的帮助,

4 个答案:

答案 0 :(得分:2)

看看你在这里发布的其他解决方案中所说的内容,很明显你是在循环遍历子数组,而不是所有这些子数组都包含你的其他循环所需的键。

试试这个:

foreach ($hero_data['skills']['active'] as $skills) {
    if (isset($skills['skill']['icon'])) {
        print_r($skills['skill']['icon']);
    }
}

例如,如果$hero_data['skills']['active'][8]实际上没有skill数组或['skill']['icon']数组进一步向下,那么循环将抛出您报告的错误。< / p>

您正在寻找的嵌套数组键必须在循环的每次迭代中找到,否则您必须插入一个子句以跳过这些数组元素(如果找不到它们)。看起来您的$hero_data数组中的部分没有['skill']['icon'],因此请尝试在循环中插入一个或多个isset()检查。否则,您需要找到一种保证$hero_data数组完整性的方法。

顺便说一句,你的游戏看起来很有趣!

答案 1 :(得分:0)

在内部技能中,您拥有“活动”属性并且它包含您需要的数组,因此您需要将代码更改为:

 foreach ($hero_data['skills'] as $skills)
            {
                foreach ($skills['active'] as $skill)
            {
                //print_r($skill['skill']);
            }
    }

答案 2 :(得分:0)

尝试:

foreach ($hero_data['skills'] as $skills)
{
  foreach ($skills as $skillState)
  {
    foreach ($skillState as $skill)
    {
      print_r($skill['skill']);
    }
  }
}

答案 3 :(得分:0)

您只需要迭代数组的活动索引。这应该有效:

foreach ($hero_data['skills']['active'] as $skills) {
    print_r($skills['skill']['icon']);
}