在PHP中将stdClass对象转换为关联数组

11

我需要将这个数组转换

Array ( 
[0] => stdClass Object 
     ( [title] => primo ) 
[1] => stdClass Object 
     ( [title] => secondo )) 

Array ( 
[primo] => primo
[secondo] => secondo ) 

尝试了不同的选项,包括类型转换,仍未找到正确的解决方案


3
可能是将PHP对象转换为关联数组的重复问题。 - Chetan Ameta
如果我使用json函数,我会得到以下数组 Array ( [0] => Array ( [title] => primo ) [1] => Array ( [title] => secondo ) ) - Ponzio Pilato
这是一个对象数组合并为关联数组的过程,不仅仅是将对象转化为数组,可能不会有重复。 - Chris Trudeau
6个回答

21

使用json_encode() json_decode()

$arr = json_decode(json_encode($yourObject), TRUE);

json_decode()的第二个参数设置为TRUE

函数定义:

mixed json_decode ( string $json [, bool $assoc = false [, int $depth > = 512 [, int $options = 0 ]]] )

这将把您的对象转换为关联数组。


1
简单的解决方案就是我喜欢 Stackoverflow 的原因! - exoboy

2

最终我做到了这个:

$options = array('' => '<select>');
$results = $query->execute()->fetchAll();
foreach($results as $id => $node) {
  $value = $node->title;
  $options[$value] = $value;
}

感谢您的回答。

1
请检查这段代码,我还没有调试它...
$array = array_values($array);
$new_array = array();
foreach($array as $row){
   $new_array[$row['title']] = $row['title'];
}

1
$final_array = array();

foreach ($items as $item)
{
    $final_array = array_merge($final_array, json_decode(json_encode($item), true);
}

其中$items是您的数组名称。 应该遍历对象数组,将该对象转换为关联数组,并将其合并到$final_array中。


1

只需像这样使用array_walk

$result = array();
array_walk($arr,function($v)use(&$result){ 
      $result[$v->title] = $v->title;
});
print_r($result);

-2

回答这个主题的问题,你可以通过简单地将其转换为数组来实现对象转换为关联数组:

$array = (array) $object;

然而,在所讨论的例子中,基本操作可以帮助生成所需的数据结构,而无需使用任何内置函数。
$array = [];
foreach ($arrayOfObjects as $object) {
    $title = $object->title ?? null;
    if (!is_null($title)) {
        $array[$title] = $title;
    }
}

你确定吗?我认为对象数组不会被转换为键设置为某个对象的任意元素的数组。 - Nico Haase
我并不是在试图回答问题作者引发的特定情况,因为没有内置函数可以解决这个问题。由于数据结构是无限的,我们无法创建预定义的方法来满足所有需求。我只是想分享一个提示,如果有人查找线程标题,可以被社区使用。 - Khoubeib Bouthour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接