-1

如果我省略该=> $v部分,下面代码的第 3 行将失败。我收到以下错误:

Warning: Illegal offset type in /home/site/page.php on line 404

当第[$k]5 行更改为 时['$k'],我收到以下错误。

Notice: Undefined index: $k in /home/site/page.php on line 404

当它像下面一样完整时,$k => $v一切正常。我什至不使用$v. 为什么我需要它在foreach循环中使它工作呢?

<? 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>
    <? } 
} ?>

我确实看到了这个答案,但不知道它是否真的适用。非常感谢!

4

4 回答 4

2

无论哪种方式,您都在循环遍历数组中的每个项目。

如果您只是执行 foreach $k,则将 $k 设置为数组中的每个 VALUE,忽略键

如果将其保留为 $k => $v,则将 $k 设置为每个 KEY,并将 $v 设置为附加到该键的每个 VALUE。

例如,您有一个如下所示的数组:

$arr=array(
    1=>'a',
    2=>'b',
    3=>'c'
);

并做:

foreach($arr as $k){
    echo "k is $k <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
于 2012-06-27T21:15:38.760 回答
1

那是因为 $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>
    <? } 
} ?>
于 2012-06-27T21:09:08.853 回答
1

该构造$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'] ?>

这相当于$arr['status']['chain'][$k]['message']。所以最终不是$v你不需要在你的循环中,而是$k你不需要。

 // Iterate the values only. Keys aren't actually needed.
 foreach ( $arr[ 'status'][ 'chain'] as $v) {
     // snip html markup..
            <?= $v[ 'message'] ?>
 }
于 2012-06-27T21:09:53.650 回答
1

使用时必须始终指定值foreach它是可选的键

像这样,

foreach ($array as $k => $v)

...然后$k是关键,$v也是价值。如果你这样做:

foreach ($array as $k)

...然后$k成为value,而不是 key。如果你只想要钥匙,你可以这样做:

while (list($key) = each($array)) {
    echo $key;
}

...或者:

while (key($array) && next($array)) {
    echo $key;
}
于 2012-06-27T21:13:47.480 回答