$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
有什么想法吗?
答案 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