2015-02-11 2 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

+0

@VeeeneX Это встроенная функция Laravel: var_dump и die, dd. Если вы 'dd ($ default)' без 'gettype', что он возвращает? –

+0

Сделайте некоторые основные проблемы со стрельбой, Var Дамп всех переменных, чтобы увидеть, что они стоят – Patrick

ответ

1

gettype возвращает тип переменной в результате строки и результат может быть "array", но это все еще строка. Таким образом, dd/var_dump показывает его как строку. Попытка:

echo gettype($default); 
+1

, которая также возвращает тип в виде строки – JorenV

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 - строка.

Смежные вопросы