我有以下代码
dd(gettype($default));
$test = substr($default,0,2);
gettype 返回 $ default 的类型为 string 第二行发生以下错误:
substr() expects parameter 1 to be string, array given
这是怎么回事,我该如何解决?
编辑 var_dump还会返回一个字符串
编辑 $ default包含以下字符串:“1015”
修改完整代码块
Form::macro('time', function ($name, $default) {
$hours = value(function () use ($default){
echo gettype($default);
$test = substr($default,0,2);
$hours = ['' => $test];
for ($hour = 0; $hour < 24; $hour++) {
$hours[$hour] = $hour;
}
return $hours;
});
编辑使用宏的代码
{{ Form::label('reservation_starthour', 'starthour') }}
{{ Form::time('starthour',$reservation->starthour) }}
预订表的架构
Schema::create('reservations', function (Blueprint $table) {
$table->increments('id');
$table->integer('group_id')->unsigned();
$table->date('startdate');
$table->date('enddate');
$table->string('starthour');
$table->string('endhour');
});
答案 0 :(得分:1)
gettype
返回变量的类型作为字符串结果,结果可能是"array"
,但它仍然是一个字符串。因此dd
/ var_dump
将其显示为字符串。尝试:
echo gettype($default);
答案 1 :(得分:0)
我找到了一种解决方法,但没有解释为什么变量改变了类型。
Form::macro('time', function ($name, $default) {
$hours = ['' => substr(strval((int)$default),0,2)];
for ($hour = 0; $hour < 24; $hour++) {
$hours[$hour] = $hour;
}
$minutes = ['' => substr(strval((int)$default),2)];
for ($minute = 0; $minute < 60; $minute += 15) {
$minutes[$minute] = $minute;
}
return
Form::select($name . '[hours]', $hours) .
Form::select($name . '[minutes]', $minutes);
});
我将字符串/数组转换为int,获取字符串值,然后我可以得到子字符串值。
我会将这个问题保持开放,以便有人可以解释为什么类型会发生变化。
其他信息
每个需要字符串作为输入的函数,声明$ default是一个数组。每个需要数组作为输入的函数都声明$ default是一个字符串。