为了账号安全,请及时绑定邮箱和手机立即绑定

php stdClass到数组

php stdClass到数组

PHP
HUX布斯 2019-09-20 14:37:36
我有一个问题,将对象stdClass转换为数组。我试过这样的方式:return (array) $booking;要么return (array) json_decode($booking,true);要么return (array) json_decode($booking);在我尝试将其转换为空之后,演员阵容之前的数组已满了一条记录。如何在不删除行的情况下转换/转换它?演员阵容前:array(1) {   [0]=>   object(stdClass)#23 (36) {     ["id"]=>     string(1) "2"     ["name"]=>     string(0) ""     ["code"]=>     string(5) "56/13"   } } 如果我尝试制作一个,则在施放后为空NULL var_dump($booking);我也试过这个函数但总是空的:public function objectToArray($d) {        if (is_object($d)) {            // Gets the properties of the given object            // with get_object_vars function            $d = get_object_vars($d);        }        if (is_array($d)) {            /*            * Return array converted to object            * Using __FUNCTION__ (Magic constant)            * for recursive call            */            return array_map(__FUNCTION__, $d);        }        else {            // Return array            return $d;        }    }
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

所述懒惰单行方法

如果你愿意失去一点点性能,你可以使用JSON方法在单行中执行此操作(尽管有些人报告说它比递归迭代对象更快 - 很可能是因为PHP 调用函数很慢)。“ 但我已经这样做了 ”你说。不完全 - 你json_decode在数组上使用过,但你需要先编码json_encode。


要求

该json_encode和json_decode方法。它们自动捆绑在PHP 5.2.0及更高版本中。如果您使用任何旧版本,那么还有一个PECL库(在这种情况下,您应该真正更新您的PHP安装。在2006年停止支持5.1。)


转换array/ stdClass- >stdClass

$stdClass = json_decode(json_encode($booking));

转换array/ stdClass- >array

手册指定了第二个参数json_decode:


assoc 

时TRUE,返回的对象将被转换为关联数组。


因此,以下行将您的整个对象转换为数组:


$array = json_decode(json_encode($booking), true);


查看完整回答
反对 回复 2019-09-20
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

因为在你施放它之前它是一个数组,所以投射它是没有意义的。


你可能想要一个递归演员,看起来像这样:


function arrayCastRecursive($array)

{

    if (is_array($array)) {

        foreach ($array as $key => $value) {

            if (is_array($value)) {

                $array[$key] = arrayCastRecursive($value);

            }

            if ($value instanceof stdClass) {

                $array[$key] = arrayCastRecursive((array)$value);

            }

        }

    }

    if ($array instanceof stdClass) {

        return arrayCastRecursive((array)$array);

    }

    return $array;

}

用法:


$obj = new stdClass;

$obj->aaa = 'asdf';

$obj->bbb = 'adsf43';

$arr = array('asdf', array($obj, 3));


var_dump($arr);

$arr = arrayCastRecursive($arr);

var_dump($arr);

结果之前:


array

    0 => string 'asdf' (length = 4)

  1 => 

    array

        0 =>

        object(stdClass)[1]

          public 'aaa' => string 'asdf' (length = 4)

          public 'bbb' => string 'adsf43' (length = 6)

      1 => int 3

结果之后:


array

    0 => string 'asdf' (length = 4)

  1 => 

    array

        0 =>

        array

          'aaa' => string 'asdf' (length = 4)

          'bbb' => string 'adsf43' (length = 6)

      1 => int 3

注意:


测试并使用复杂数组,其中stdClass对象可以包含其他stdClass对象。


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信