Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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");
}