我昨晚发了一个问题,结果证明不是问题。深入研究后,我发现下面的代码让我很头疼。我有这个工作,但现在由于某种原因,我没有输出。当我var_dump
这个函数给我$finishmins
值时,它会正确输出所有东西,直到它必须搜索数组的点(如下所示)。之后显示NULL
。我最初使用strpos
来确定它是否以零开始,然后剥离说的零以匹配数组,但是当它停止工作时,我尝试了下面的方法来减少代码。
代码的作用是将时间中的分钟转换为十进制的分钟。即1分钟= 02,则12:01 = 12.02。
$finishmins = '01';
$finishmins = $minarray[$finishmins];
$minarray = array(
00 => '00',
01 => '02',
02 => '03',
03 => '05',
04 => '07',
05 => '08',
06 => '10',
07 => '12',
08 => '13',
09 => '15',
10 => '17',
'18',
// Array continues to 59 => '98'
);
echo $finishmins;
我已经将完整的代码粘贴在这里:http://codepad.org/EUW3n7AB,但似乎仍然找不到问题
有两个问题:
- 数组索引在字符串和数字之间的行为不同,
-
$minarray
. 变量范围
$arr[01]
和$arr['01']
不是同一件事,所以你应该更明确;在你的情况下,你可以让数组保持数字索引,即:
$minarray = array('00', '02', '03', '05', ...);
然后,对给定的分钟使用(int)
强制转换:
$finishmins = $minarray[(int)$finishmins];
可以通过将数组作为函数参数传递来解决第二个问题:
function finishtime($minarray, $finish)
然后这样调用:
echo finishtime($minarray, '12:01');
当引用$minarray
变量时,您必须在函数中使用关键字global
:
function finishtime($finish) {
global $minarray;
$finishx = explode(':', $finish);
$finishhours = $finishx[0];
$finishmins = $finishx[1];
$finishmins;
var_dump($finishmins);
$finishmins = $minarray[$finishmins];
var_dump($finishmins);
$finishtime = $finishhours . '.' . $finishmins;
return $finishtime;
}