You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历stdClass类型数据?PHP反序列化数组遍历报错解决

解决stdClass对象无法按数组方式访问的问题

你遇到的错误是因为反序列化后得到的不是数组,而是stdClass对象集合,所以不能用数组下标['xxx']访问属性,得用对象属性的访问方式->xxx,或者把对象转成数组处理。

方法一:直接用对象属性访问修改代码

这是最直接高效的方式,直接将数组下标访问改为对象属性访问:

// Unserialize the order items from $wpla_order->items
$wpla_order_items = maybe_unserialize( $wpla_order->items );

$order_items = [];

// Loop through each order item
foreach ( $wpla_order_items as $wpla_order_item ) {

    // Create array of order items data
    $order_items[] = [
        'item_id' => $wpla_order_item->OrderItemId,
        'quantity' => $wpla_order_item->QuantityOrdered,
    ];
}

方法二:将stdClass对象转为数组

如果习惯用数组操作,可以把每个对象转成数组,两种常用方式如下:

方式1:类型强制转换

简单直接,适用于非嵌套的对象:

// Unserialize the order items from $wpla_order->items
$wpla_order_items = maybe_unserialize( $wpla_order->items );

$order_items = [];

// Loop through each order item
foreach ( $wpla_order_items as $wpla_order_item ) {
    // 转成数组
    $item_array = (array)$wpla_order_item;
    // Create array of order items data
    $order_items[] = [
        'item_id' => $item_array['OrderItemId'],
        'quantity' => $item_array['QuantityOrdered'],
    ];
}

方式2:JSON序列化再反序列化

适合嵌套多层对象的场景,会把所有嵌套对象都转为数组:

// Unserialize the order items from $wpla_order->items
$wpla_order_items = maybe_unserialize( $wpla_order->items );

$order_items = [];

// Loop through each order item
foreach ( $wpla_order_items as $wpla_order_item ) {
    // 转成数组
    $item_array = json_decode(json_encode($wpla_order_item), true);
    // Create array of order items data
    $order_items[] = [
        'item_id' => $item_array['OrderItemId'],
        'quantity' => $item_array['QuantityOrdered'],
    ];
}

补充说明

maybe_unserialize函数会根据序列化内容自动返回对应类型——如果原数据是序列化的对象,它就返回stdClass;如果是序列化的数组,才返回数组。你可以用var_dump($wpla_order_items)确认返回的具体类型,方便后续处理。

内容的提问来源于stack exchange,提问作者wharfdale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:55:25