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

Notice: Undefined offset: 1 when creating a Array-Element?

我有一个我无法解释的奇怪行为。我用 foreach 循环一个数组,从它的值创建另一个输出数组:

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

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

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

Notice: Undefined offset: 1 in E:\XAMPP\htdocs\WP\wp-content\plugins\test\php\test.php on line 163

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

的行

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

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

请尝试

$mainDivs[$tabCount] = 'blablabla';

而不是

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

如果不需要追加字符串 blablabla.

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";

删除点 (.) 如果你使用点意味着它作为连接。

1) 您试图将之前未设置的值连接起来,因此您必须使用 = 删除该连接。

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

改为

$mainDivs[] = 'blablabla';

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

$mainDivs = array();

foreach($output as $node) {

   $mainDivs[] = 'blablabla';

 }

. 用于连接而不是数组 assignment.So 删除它

所以代码必须是:-

$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

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

这个:

$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';        
  }
}

?>