PHP对象转换为数组而不包含命名空间

4

我想将对象强制转换成数组。

默认的转换方案存在奇怪的行为;它会在属性名称前添加对象(类)的命名空间!

我的代码:

$assoc = (array) $product;
print_r($assoc);

输出结果:
[App\Model\Productid] = 1
[App\Model\Productname] = Samsung Galaxy S3
[App\Model\Productprice] = 120

我需要的内容:

[id] = 20568
[name] = Samsung Galaxy S3
[price] = 120

1
会不会有效:$data = json_decode(json_encode($product), true);,不了解对象的更好描述很难知道。当然,这并不会丢掉“product”,可以在json字符串上执行一个str_replace来完成。 - kainaw
http://php.net/manual/en/reflectionclass.getshortname.php - giaour
你如何从 Productid 转换为 id - AbraCadaver
踩票?为什么?请... - Milad Rahimi
@Milad 我没有投反对票,但您要求我们将对象转换为数组,却没有告诉我们有关对象的任何信息。在对象上执行 print_r 并向我们展示其外观。然后,我们可能能够回答您的问题。 - kainaw
问题不在于对象,而是在于数组键之前的命名空间,每个人都知道PHP会将其添加到其中。 - Milad Rahimi
2个回答

2
$obj = new \ReflectionObject($product); 
print_R($obj->getName());  // get namespace and class name here

0

我建议使用内置方法 get_object_vars(object $object): array。请参阅文档

$data = get_object_vars($product);

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