Как передать переменную в массив
У меня есть переменная $v, которая может быть либо отдельной строкой, либо массивом строк, и у меня есть код:
$a = array();
if (is_array($v)) {
$a = $v;
} else {
$a[] = $v;
}
Как это можно сделать более элегантным способом? (другими словами, как передать переменную в массив)
Ответы
Ответ 1
Вы можете применить переменную к массиву в этом смысле (хотя в PHP нет необходимости.)
$var = (array)$arr;
Кроме того, в то время как вы можете сделать выше, чтобы установить переменную $arr
в $var
и заставить ее быть массивом, в этом не так много смысла. В PHP большинство вещей мы можем назвать "типами данных", поскольку программисты просто не существуют. Любая переменная может быть двойной, float, string... все сразу. Они почти полностью взаимозаменяемы.
Смотрите: http://php.net/manual/en/language.types.php
Ответ 2
$a = (array) $v;
- ответ.
Ответ 3
Я бы написал ваш фрагмент как этот (короткий, и вы его прочитали и точно знаете, что происходит):
$a = is_array($v) ? $v : array($v);
Ответ 4
В качестве альтернативы вы можете использовать settype
:
settype($a, "array");
Для объяснения типа переменной. Это точно так же, как то, что происходит с типом за кулисами. (Более полезно для группового приведения типов, например, в циклы.)
Ответ 5
Если вы хотите преобразовать объект в один массив счетчиков, вы можете использовать следующий код:
$list = array([0] => $obj);
Другие предоставленные ответы не будут работать при попытке конвертировать объект, он просто преобразует поля этого объекта в ассоциативный массив (если это не то, что вы пытаетесь сделать).
$var = (array)$arr;
Ответ 6
На самом деле, если вы хотите отбросить массив и не беспокоиться о том, что вы в него вложили, ответ
$var = (is_object($var)) ? array($var) : (array) $var;
Вы можете проверить это с помощью следующего кода
function toArray($var) {
return (is_object($var)) ? array($var) : (array) $var;
}
$object = new stdClass;
$resource = fopen('php://stdout', 'w');
$closure = function () {};
$tests = array(
array(toArray(true), array(true), 'boolean true'),
array(toArray(false), array(false), 'boolean false'),
array(toArray(null), array(), 'null'),
array(toArray(1), array(1), 'positive integer'),
array(toArray(0), array(0), 'zero integer'),
array(toArray(-1), array(-1), 'negative integer'),
array(toArray(1.5), array(1.5), 'positive float'),
array(toArray(0.0), array(0.0), 'zero float'),
array(toArray(-1.5), array(-1.5), 'negative float'),
array(toArray(''), array(''), 'empty string'),
array(toArray('foo'), array('foo'), 'string'),
array(toArray(array()), array(), 'array'),
array(toArray($object), array($object), 'object'),
array(toArray($resource), array($resource), 'resource'),
array(toArray($closure), array($closure), 'closure'),
);
foreach ($tests as $test) {
ob_start();
var_dump($test[0]);
$a = ob_get_clean();
ob_start();
var_dump($test[1]);
$b = ob_get_clean();
assert($a === $b, "{$test[2]} is not the same");
}