所有阵列都没有显示?

时间:2011-06-06 13:27:35

标签: php arrays

好的,这很奇怪。我有一系列时间块:

$time_block = array("09:00:00-13:00:00","10:00:00-14:00:00");

我想循环遍历它们以创建每个块的开始时间和结束时间:

foreach($time_block as $val)
{
    for($x = 0; $x < count($time_block); $x++)
    {
        $time=$val[$x];
        echo substr($time,0,8);
        echo "<br>";
        echo substr($time,-8);
    }
    echo "<br>";
    echo "<br>";
}

最终结果应为:

09:00:00
13:00:00

10:00:00
14:00:00

但我得到了:

0
09
9

1
10
0

有什么想法吗?

6 个答案:

答案 0 :(得分:3)

您写道:$time = $val[$x]; $val不是一个数组,它是一个字符串,好像你在同一个数组上做foreach然后for

您可以使用以下内容:

foreach ($timeblock as $timeString) {
     list($start, $end) = explode("-", $timeString);
     echo "$start $end\n";
}

答案 1 :(得分:2)

foreach($time_block as $v) {
   print_r(explode( '-',$v ));
   echo '<br><br>';
}

答案 2 :(得分:2)

foreach循环中,$val是一个字符串。当你要求$val[$x]时,你要求该字符串的第x个字符。可能不是你想要的。

<强>解决方案:

取出for声明,然后更改

$time=$val[$x];

$time=$val;

答案 3 :(得分:2)

试试这个:

for($x = 0; $x < count($time_block); $x++){
    $time = $time_block[$x];
    echo substr($time,0,8);
    echo "<br>";
    echo substr($time,-8);
    echo "<br><br>";
}

您使用的是2个嵌套循环,而数据集中只有1个维度。这应该会让你思考。

答案 4 :(得分:1)

你的方法的问题是你试图循环遍历该元素两次。如果使用foreach($time_block as $val),则在每次迭代中$val将是数组的单个元素。例如,在第一次运行时,它将存储"09:00:00-13:00:00"。所以在你的for循环中,你试图遍历这个$val,这实际上是可能的,因为字符串可以作为数组访问(字符串中的字符是元素)。

这将产生您需要的确切输出

foreach($time_block as $val) {
    $t=explode('-', $val);
    echo $t[0]."<br>".$t[1]."<br><br>";
}

此处,explode()用于根据$val字符分隔-中的时间值。 $t将是一个数组,在$val中保留两次作为其两个元素。

答案 5 :(得分:0)

在你的代码中,你是双循环,只需像这样使用它:

$time_block = array("09:00:00-13:00:00","10:00:00-14:00:00");
foreach($time_block as $time) {
   echo substr($time,0,8) . " ";
   echo substr($time,-8) . "\n";
}

输出

09:00:00 13:00:00
10:00:00 14:00:00