将StdClass对象转换为数组

时间:2019-10-14 09:16:27

标签: php arrays

我已经看到了该帖子的解决方案:Convert a PHP object to an associative array,但对我而言不起作用。我尝试了几种方法来将stdclass对象转换为数组,但是没有运气。我正在尝试将一些数据从数据库发送到位于不同国家/地区的另一台服务器。这就是我尝试的方式:

这是功能:

public function update($dir, $id, $input)
    {           
        $data = ['id'=>$id, 'data'=>$input];

        $json = $this->call('PUT', '/'.$dir, $data);

        return $json;
    }

这就是我正在尝试的:

    require_once('../Rest_smp.php');
    $id="1366";
    $data["operating_city_ids"] = [1,2,3];
    $employee_array = (array) $data;
    echo (new Rest_smp())->update('promoter', $id, $employee_array);

结果是这样的:

[871] => stdClass Object
                (
                    [id] => 1366
                    [name] => NAME NAME
                    [username] => 145576
                    [email] => EMAIL@YAHOO.COM
                    [spi_classified] => 
                    [country_id] => 5
                    [timezone_id] => 9
                    [language_id] => 1
                    [status ] => active
                    [operating_city_ids] => stdClass Object
                        (
                            [1] => 123
                        )

                    [address] => CAMIL RESSU
                    [zip] => 000000
                    [phone] => 0766XXXXXX
                    [birth] => 1990-07-05
                    [gender] => female
                    [height] => 180
                    [shirt_size] => L
                    [shoe_size] => 42
                    [jeans_size] => 36
                    [driver_license] => yes
                    [employment_start_date] => 
                    [employment_end_date] => 
                    [clients] => Array
                        (
                        )

                )

问题在这里:

[operating_city_ids] => stdClass Object
                            (
                                [1] => 123
                            )

它应该是一个数组,值应该为0 => 1,1 => 2,2 => 3。他们对我说,我应该强制转换stdcass对象,但仍然无法正常工作。我想念什么吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是将StdObject转换为数组:

$result = (array)(new Rest_smp())->update('promoter', $id, $employee_array);
var_dump($result);

请参阅https://3v4l.org/TpUUF

但是我会在更新函数内部而不是外部进行

function update(...) {
    ...

    return (array) $data;
}

您尝试将一个数组强制转换为数组,这没有效果:

$employee_array = (array) $data;

如果您使用的是json_decode,则需要传递true作为第二个参数,请参见https://www.php.net/manual/de/function.json-decode.php

答案 1 :(得分:0)

尝试使用第二个参数TRUE解码您的json_decode,其中返回的对象将转换为关联数组。

使用和不使用该标志的区别的示例:

<!-- Optional - lodash library, used for throttlin onScroll handler-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
<header id="navbar"></header>
<div id="content"></div>

输出(带有换行符):

<?php

$data = 
[
    ['fruit'=>'apple', 'nut' => 'almond']
];

var_dump($json = json_encode($data));
$decoded = json_decode($json);
var_dump($decoded);
$decoded_array = json_decode($json, TRUE);
var_dump($decoded_array);