php преобразование переменной в массив

#php #arrays #casting

#php #массивы #Кастинг

Вопрос:

Я имею дело с очень странной проблемой работы с мусором при переборе переменной, которая была преобразована в массив

 $arr = (array)$var; // problem
$arr = array($var); // ok
  

Первый метод, похоже, отлично работает со значениями с целыми числами, но не со строками. Есть ли какая-либо документированная разница и есть ли в php real приведение?


Проблема связана с lavarel 4, источниками базы данных, функцией в строке 704

Комментарии:

1. Можете ли вы сказать, какое значение $var для двух примеров?

2. Во-вторых, это не приведение к типу, вы создаете массив из одного элемента, а значение элемента равно $var .

3. Это ошибка PHP — исправлена в PHP 5.2.7 и выше. Какую версию вы используете?

4. Ваша проблема не может быть переформулирована: ideone.com/cnkOqV

5. Первым шагом для предоставления дополнительной информации может быть указание нам, что garbage это такое. И какое входное значение обеспечивает это garbage .

Ответ №1:

Если $var это скаляр, документально подтверждено, что обе строки выполняют одно и то же:

Для любого из типов: integer, float, string, boolean и resource, преобразование значения в массив приводит к массиву с одним элементом с нулевым индексом и значением скаляра, который был преобразован. Другими словами, (array)$scalarValue — это точно то же самое, что и array($scalarValue).

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

Комментарии:

1. итак, это означает, что это ошибка, я бы ожидал такой функциональности

2. @Ulterior: да, если у вас есть воспроизводимый случай ошибки, не стесняйтесь отправлять его по адресу bugs.php.net . Обе строки должны делать то же самое.

Ответ №2:

Существует два способа приведения переменной в PHP к определенному типу.

  1. использование функции settype()
  2. используя (int) (bool) (float) и т. Д

Дополнительная информация: http://www.electrictoolbox.com/type-casting-php /

Комментарии:

1. settype приводит к тому же мусору при итерации по массиву