注意:未定义的偏移量:创建数组元素时为1?

时间:2016-09-09 06:34:56

标签: php arrays notice

我有一种奇怪的行为,我无法解释。我使用foreach循环一个数组,以便根据它创建一个其他输出数组:

$tabCount = 0;
$mainDivs = array();

foreach($output as $node) {
   $tabCount++; 
   $mainDivs[$tabCount] .= 'blablabla';
}

输出在那里,似乎是正确的(没有遗漏)。但是PHP给了我一个通知:

  

注意:未定义的偏移量:在第163行的E:\ XAMPP \ htdocs \ WP \ wp-content \ plugins \ test \ php \ test.php中为1

line 163是我执行$mainDivs[$tabCount] .= 'blablabla';

的行

怎么会这样?我的意思是,我确实创建了数组元素(?)

5 个答案:

答案 0 :(得分:1)

该通知是由于您的字符串追加运算符.=引起的。 因此,在将新字符串写入数组之前,PHP将读取$mainDivs[$tabCount]。该读数引起了通知

请尝试

$mainDivs[$tabCount] = 'blablabla';

而不是

$mainDivs[$tabCount] .= 'blablabla';

如果追加字符串blablabla不是必须的。

答案 1 :(得分:1)

1)您收到PHP notice,因为您正在尝试访问array index而非set。首先尝试检查$output数组是否有值

尝试检查print_r($output);

2)在分配. array时不要使用value

简单地

$mainDivs[$tabCount] = 'blablabla';

以下是创建arrays的方法:

可以自动分配index(索引始终从0开始),如下所示:

$cars = array("Volvo", "BMW", "Toyota");

$cars[] = "Volvo";
$cars[] = "BMW";
$cars[] = "Toyota";

或手动分配索引:

$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";

答案 2 :(得分:1)

如果使用点表示其作为连接,则删除点(。)。

1)你试图将之前未设置的值设置为cancatenate,因此你必须使用= remove cancatenate。

view

更改为

$mainDivs[$tabCount] .= 'blablabla';

您不需要编制索引。它自动自动索引,也只从零开始。

$mainDivs[] = 'blablabla';

答案 3 :(得分:1)

.用于连接而不是用于数组赋值。所以删除它

所以代码必须是: -

$tabCount = 0;
$mainDivs = array();
if(isset($output) && count($output)>0){ // Check that your array is set and have values so that foreach will not produce error
   foreach($output as $node) {
      $mainDivs[$tabCount] = 'blablabla';
      $tabCount++; 
  }
}

注意: -

参考: -

字符串连接: - http://php.net/manual/en/language.operators.string.php

数组: - http://php.net/manual/en/language.types.array.php

答案 4 :(得分:1)

无需在数组赋值中使用连接。

此:

$mainDivs[$tabCount] .= 'blablabla';

应该是:

$mainDivs[$tabCount] = 'blablabla';

使用foreach()之前的另一个建议是检查数组count > 0与否。

示例:

<?php

$tabCount = 0;
$mainDivs = array();

if(count($output) > 0){ // check the count
  foreach($output as $node) {
    $tabCount++;
    $mainDivs[$tabCount] = 'blablabla';        
  }
}

?>