it-roy-ru.com

Как привести переменную в массив

У меня есть переменная $ v, которая может быть либо одной строкой или массивом строк
и у меня есть код:

$a = array();
if (is_array($v)) {
    $a = $v;
} else {
    $a[] = $v;
}

Как это можно сделать более изящным способом? (другими словами, как преобразовать переменную в массив)

30
tsds

Вы можете привести переменную к массиву, используя:

    $var = (array)$arr;
53
cbroughton
$a = (array) $v;

это ответ.

17
Kelly

Я написал бы ваш фрагмент кода следующим образом (коротко, вы читаете его и точно знаете, что происходит):

$a = is_array($v) ? $v : array($v);
7
kapa

В качестве альтернативы вы можете использовать settype

settype($a, "array");

Для экспликации типа переменной. Это точно так же, как то, что происходит за кулисами. (Более полезно для группирования типов, например, в циклах.)

3
mario

Если вы хотите преобразовать объект в массив с одним счетчиком, вы можете использовать следующий код: 

$list = array([0] => $obj);

Другие предоставленные ответы не будут работать при попытке конвертировать объект, он просто преобразует поля этого объекта в ассоциативный массив (если это не то, что вы пытаетесь сделать). 

$var = (array)$arr;
1
matwonk

Как уже говорили другие, приведение значения scalar к массиву приведет к созданию одноэлементного массива (то есть массива со скаляром в качестве единственного элемента). Однако, как уже отмечали другие, старайтесь делать это только в том случае, если вы знаете, что значение будет скалярным, а не экземпляром class.

Из PHP документов :

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

Если объект преобразуется в массив, результатом является массив, чей элементы - это свойства объекта. Ключи являются переменной-членом имена, за некоторыми заметными исключениями: целочисленные свойства недоступны; Закрытые переменные имеют имя класса, добавленное к имя переменной; Защищенные переменные имеют префикс «*» перед имя переменной. Эти предварительно добавленные значения имеют нулевые байты с обеих сторон.

0
GuyPaddock