我已经看到了该帖子的解决方案: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对象,但仍然无法正常工作。我想念什么吗?
答案 0 :(得分:0)
最简单的方法是将StdObject转换为数组:
$result = (array)(new Rest_smp())->update('promoter', $id, $employee_array);
var_dump($result);
但是我会在更新函数内部而不是外部进行
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);