我不明白我的代码是怎么回事)))也许我只是需要更多的经验,但是...让我们进入正题:
我写了一个函数,它为我的系统返回一个带有一些统计数据的数组,我所需要的只是将参数指定为 Year、M、D。如果我发送类似 getStatData(2016,07,07)
的东西 - 工作正常,但就像我发送带有数字 8 的东西一样 - 它失败了!例如:getStatData(2016,07,08)
当然我有一个 fn 需要的文件,更多 如果将参数指定为字符串('2016'、'07'、'08'),它可以正常工作;但这并不酷:D
该函数:
function getStatData($y,$m,$d=false){
if(isset($y) && is_numeric($y) && isset($m) && is_numeric($m)){
$m=($m<10)? '0'.$m : $m;
if(isset($d)){
$d=($d<10)? '0'.$d : $d;
$y= 'days/'.$y;
$data = file_get_contents(STATDIR.'/'.$y.'/'.$m.'_'.$d.'.json');
}
else {
$data = file_get_contents(STATDIR.'/'.$y.'_'.$m.'.json');
}
return json_decode($data, true);
}
else return false;
}
叫。。。
print_r(getStatData(2016,07,08)); //call with 08
错误:file_get_contents(核心/统计/天数/2016/07_00.json):无法打开流:没有此类文件或目录
带有零前缀的数字是八进制文字,而不是零填充的十进制整数。似乎无效的八进制在 PHP 5 中被默默地视为0
。您应该传入7
并在您提供的示例中传递8
。
在 PHP 7 中,你会得到一个解析错误。 例如 Parse error: Invalid numeric literal in php shell code on line 1
.
将参数作为字符串传递,如 print_r(getStatData('2016','07','08'));
作为旁注,使用 str_pad() 函数将月份和日期格式化为 2 位数字值。相反,如果 isset($d) 使用 if($d)
function getStatData($y,$m,$d=false){
if(isset($y) && is_numeric($y) && isset($m) && is_numeric($m)){
// use str_pad
$m=str_pad($m, 2, '0', STR_PAD_LEFT);
if($d){
// use str_pad
$d=str_pad($d, 2, '0', STR_PAD_LEFT);
$y= 'days/'.$y;
$data = file_get_contents(STATDIR.'/'.$y.'/'.$m.'_'.$d.'.json');
}
else {
$data = file_get_contents(STATDIR.'/'.$y.'_'.$m.'.json');
}
return json_decode($data, true);
}
else return false;
}
print_r(getStatData('2016','07','08'));