Php 忽略=>值时出现非法偏移类型错误
如果省略=>$v部分,下面代码的第3行将失败。我得到以下错误: 警告:第404行的/home/site/page.php中输入的偏移量非法 当第5行中的[$k]更改为['$k']时,我收到以下错误 注意:未定义索引:第404行的/home/site/page.php中的$k 当它像下面这样使用完整的$k=>$v时,一切都可以工作。我甚至不用$v。为什么我需要在foreach循环中使用它才能让它工作呢Php 忽略=>值时出现非法偏移类型错误,php,Php,如果省略=>$v部分,下面代码的第3行将失败。我得到以下错误: 警告:第404行的/home/site/page.php中输入的偏移量非法 当第5行中的[$k]更改为['$k']时,我收到以下错误 注意:未定义索引:第404行的/home/site/page.php中的$k 当它像下面这样使用完整的$k=>$v时,一切都可以工作。我甚至不用$v。为什么我需要在foreach循环中使用它才能让它工作呢 <? if ( $arr[ 'status'][ 'chain'] ) { f
<? if ( $arr[ 'status'][ 'chain'] ) {
foreach ( $arr[ 'status'][ 'chain'] as $k => $v) { ?>
<tr>
<td class="line_item_data status_td">
<?= $ arr[ 'status'][ 'chain'][$k][ 'message'] ?>
</td>
<td align="center">
<img src="images/green_check.gif" width="20" />
</td>
</tr>
<? }
} ?>
我确实看到了,但不知道它是否真的适用。非常感谢 这是因为$k是一个值,但您使用它作为键。相反,写下:
<? if ( $arr[ 'status'][ 'chain'] ) {
foreach ( $arr[ 'status'][ 'chain'] as $k) { ?>
<tr>
<td class="line_item_data status_td">
<?= $k[ 'message'] ?>
</td>
<td align="center">
<img src="images/green_check.gif" width="20" />
</td>
</tr>
<? }
} ?>
构造$k=>$v用于在foreach构造中迭代数组的键和值。可以单独使用值$v进行迭代,但不能单独迭代键$k。如果您使用以下选项:
foreach ($arr['status']['chain'] as $k)
…foreach循环在语法上是有效的,但是$k将使用数组值而不是键填充。在这种情况下,数组元素$arr['status']['chain'][$k]['message']不存在,因为$k在数组$arr['status']['chain']中没有有效的密钥
然而,这可以简单得多。。。
在循环中,$v保存您试图索引的数组元素,因此您只需按以下方式访问它:
<?= $v['message'] ?>
在使用foreach时,必须始终指定该值,这是可选的键 因此,
foreach ($array as $k => $v)
…那么$k是键,$v是值。如果您这样做:
foreach ($array as $k)
…然后$k成为值,而不是键。如果只需要钥匙,可以执行以下操作:
while (list($key) = each($array)) {
echo $key;
}
…或:
while (key($array) && next($array)) {
echo $key;
}
无论采用哪种方法,都会循环遍历数组中的每一项 如果只执行foreach$k,那么将为数组中的每个值设置$k,忽略键 如果将其保持为$k=>$v,则为每个键设置$k,并为附加到键的每个值设置$v 例如,您有一个如下所示的数组:
$arr=array(
1=>'a',
2=>'b',
3=>'c'
);
并且做:
foreach($arr as $k){
echo "k is $k <br>";
}
如果你这样做了
foreach($arr as $k=>$v){
echo "k is $k and v is $v<br>";
}
读这篇文章,我可以问一下为什么这篇文章被否决了吗?
k is a
k is b
k is c
foreach($arr as $k=>$v){
echo "k is $k and v is $v<br>";
}
k is 1 and v is a
k is 2 and v is b
k is 3 and v is c