我有一个问题,将对象stdClass转换为数组.我试过这样的方式:
return (array) $booking;
Run Code Online (Sandbox Code Playgroud)
要么
return (array) json_decode($booking,true);
Run Code Online (Sandbox Code Playgroud)
要么
return (array) json_decode($booking);
Run Code Online (Sandbox Code Playgroud)
在我尝试将其转换为空之后,演员阵容之前的数组已满了一条记录.如何在不删除行的情况下转换/转换它?
演员阵容前:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
Run Code Online (Sandbox Code Playgroud)
如果我尝试制作一个,则在施放后为空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;
}
}
Run Code Online (Sandbox Code Playgroud)
h2o*_*ooo 394
如果你愿意失去一点点性能,你可以使用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));
Run Code Online (Sandbox Code Playgroud)
array/ stdClass- >array手册指定了第二个参数json_decode:
assoc
时TRUE,返回的对象将被转换为关联数组.
因此,以下行将您的整个对象转换为数组:
$array = json_decode(json_encode($booking), true);
Run Code Online (Sandbox Code Playgroud)
小智 66
使用此函数获取您所追求的类型的标准数组...
return get_object_vars($booking);
Run Code Online (Sandbox Code Playgroud)
Dav*_*ews 23
使用内置的类型转换功能,只需键入
$realArray = (array)$stdClass;
Run Code Online (Sandbox Code Playgroud)
Vla*_*eda 17
因为在你施放它之前它是一个数组,所以投射它是没有意义的.
你可能想要一个递归演员,看起来像这样:
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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
$obj = new stdClass;
$obj->aaa = 'asdf';
$obj->bbb = 'adsf43';
$arr = array('asdf', array($obj, 3));
var_dump($arr);
$arr = arrayCastRecursive($arr);
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)
结果之前:
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
Run Code Online (Sandbox Code Playgroud)
结果之后:
array
0 => string 'asdf' (length = 4)
1 =>
array
0 =>
array
'aaa' => string 'asdf' (length = 4)
'bbb' => string 'adsf43' (length = 6)
1 => int 3
Run Code Online (Sandbox Code Playgroud)
注意:
测试并使用复杂数组,其中stdClass对象可以包含其他stdClass对象.
小智 13
请使用以下php函数将php stdClass转换为数组
get_object_vars($data)
Run Code Online (Sandbox Code Playgroud)
Car*_*nos 12
这个功能对我有用:
function cvf_convert_object_to_array($data) {
if (is_object($data)) {
$data = get_object_vars($data);
}
if (is_array($data)) {
return array_map(__FUNCTION__, $data);
}
else {
return $data;
}
}
Run Code Online (Sandbox Code Playgroud)
参考:http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
| 归档时间: |
|
| 查看次数: |
229202 次 |
| 最近记录: |