我有一种奇怪的行为,我无法解释。我使用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';
怎么会这样?我的意思是,我确实创建了数组元素(?)
答案 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
答案 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';
}
}
?>