How to cast variable to array

前端 未结 8 2042
抹茶落季
抹茶落季 2020-12-17 07:54

I have a variable $v that can be either single string or array of strings
and I have a code:

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


        
8条回答
  •  攒了一身酷
    2020-12-17 08:06

    Actually if you want to cast to an array and not have to worry about what you put into it, the answer is

    $var = (is_object($var)) ? array($var) : (array) $var;
    

    You can test this with the following code

    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");
    }
    

提交回复
热议问题