php将字符串识别为数组

时间:2015-02-11 20:45:33

标签: php laravel-4

我有以下代码

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');
    });

2 个答案:

答案 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是一个字符串。