2015-02-11 84 views
3

我有以下代码PHP识别字符串作为阵列

dd(gettype($default)); 
$test = substr($default,0,2); 

的GetType返回该的$默认类型是 在第二行上发生以下错误:

substr() expects parameter 1 to be string, array given 

这是怎么发生的,我该如何解决?

编辑的var_dump也返回一个字符串类型

编辑 $默认包含下列字符串: “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

dd()是什么? – VeeeneX 2015-02-11 20:46:37

+0

@VeeeneX这是一个内置的Laravel函数:var_dump和die,dd。如果'dd($ default)'没有'gettype',它会返回什么? – 2015-02-11 20:47:08

+0

做一些基本的故障排除,Var转储所有变量以查看它们的价值 – Patrick 2015-02-11 20:47:12

回答

1

gettype的模式返回变量的类型为字符串结果,而结果可能是"array",但它仍然是一个字符串。因此,dd/var_dump将其显示为一个字符串。尝试:

echo gettype($default); 
+1

也返回类型为字符串 – JorenV 2015-02-11 20:51:02

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