php foreach没有在数组中显示第一个值

时间:2012-05-21 17:43:28

标签: php loops foreach echo associative-array

我有一个数组($vEvents),如下所示:

Array
(
[0] => Array
    (
        [id] => 1174
        [date] => 120411
        [name] => DR. J 'Souled Out' ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )

[1] => Array
    (
        [id] => 1108
        [date] => 120410
        [name] => Verb presents Open Stage ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )

[2] => Array
    (
        [id] => 1104
        [date] => 120409
        [name] => DR. J 'Souled Out' ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )
[currLimit] => 10
[eventsRemaining] => 4

我在屏幕上回复:

reset ($vEvents);
foreach ($vEvents as $key => &$value) {
    if ($key != 'currLimit' && $key != 'eventsRemaining'){ //Makes sure it doesn't print out the limiter value
    $m = substr($value['date'],0,2);
    $d = substr($value['date'],2,2);
    $y = '20'.substr($value['date'],4,2);
    echo date("D", mktime(0, 0, 0, $m, $d, $y)).", ".date("M", mktime(0, 0, 0, $m, $d, $y))." ".$d.", ".$y." - ".$value['name'].'<br />';
    }
}

但是在我的输出中,不是获取所有显示的数组条目,而是继续跳过第一个...输出:

Sat, Dec 04, 2010 - Verb presents Open Stage ~ 9pm (No Cover)
Fri, Dec 04, 2009 - DR. J 'Souled Out' ~ 9pm (No Cover)

但是,我的预期输出应为:

Sun, Dec 04, 2011 - DR. J 'Souled Out' ~ 9pm (No Cover)
Sat, Dec 04, 2010 - Verb presents Open Stage ~ 9pm (No Cover)
Fri, Dec 04, 2009 - DR. J 'Souled Out' ~ 9pm (No Cover)

我已尝试更改name键中的值等,但所有其他整个显示正常,它只是总是跳过第一个键。我之前从未遇到过这个问题。想法?

当我注释掉if ($key != 'currLimit' && $key != 'eventsRemaining'){ //Makes sure it doesn't print out the limiter value行时,它运行正常。第一个元素的键是零是否相关?但是为什么我的if检查失败?

2 个答案:

答案 0 :(得分:2)

当PHP处理值为0时,PHP很奇怪......在大多数情况下,它将它们视为假。所以,

if ($key != 'currLimit' && $key != 'eventsRemaining')
当$ key == 0时,

将评估为false。我会将其更改为:

if ($key !== 'currLimit' && $key !== 'eventsRemaining')

答案 1 :(得分:-3)

因为这是一个数组,我会尝试使用一种不同类型的循环,它可以给你预期的结果:

<?php

$length = count( $vEvents );

for( $i = 0; $i < $length; i ++ )
{

$key = $i;
$value = $vEvents[ $i ];

//rest of the loop code here

}
?>