Php 在对象中搜索元键并获取值

Php 在对象中搜索元键并获取值,php,object,Php,Object,我在Woocommerce中对当前订单进行了var_转储。输出是一个大的数据对象: 在这个对象的某个地方是密钥_enviso_order_id和_enviso_order_number。是否有可能在对象中进行“搜索”并获得相应的值 $order = wc_get_order( $order_id ); // this gets the data from the current order var_dump($order); // dump from the data. Full example

我在Woocommerce中对当前订单进行了var_转储。输出是一个大的数据对象:

在这个对象的某个地方是密钥_enviso_order_id和_enviso_order_number。是否有可能在对象中进行“搜索”并获得相应的值

$order = wc_get_order( $order_id ); // this gets the data from the current order
var_dump($order); // dump from the data. Full example: https://snippi.com/s/rftgioq
我试过这个来获得_enviso_订单_id

$enviso_id = $order->_enviso_order_id;
echo $enviso_id;

但是它是空的。

在与OP讨论了这个问题(可以找到)后,下面回答了这个问题:

$value = $order->get_meta_data()[8]->get_data()['value'];
$metadata = json_decode($value);
$enviso_id = $metadata[0]->_enviso_order_id;

echo $enviso_id;
问题是“enviso”元数据可能并不总是存储在数组的第8个元素中,如果使用上面的代码示例,这将产生错误

get_data()
返回的数组还包括一个名为
key
的键,该键指示元数据的相关内容(在本例中为其“\u enviso\u order\u info”),我们可以使用该键创建一个帮助函数,以从订单中提取“enviso”元数据:

function get_enviso_metadata($order) {
    $metadatas = $order->get_meta_data();
    
    foreach($metadatas as $metadata) {
        $data = $metadata->get_data();
        
        if($data['key'] == '_enviso_order_info') {
            return json_decode($data['value'], true)[0];
        }
    }
    
    return [];
}
用法示例:

$order = wc_get_order($order_id);
$envisoMetadata = get_enviso_metadata($order);

echo $envisoMetadata['_enviso_order_id'];

由于我没有访问开发环境的权限,我没有办法测试它,但是在与OP讨论之后,我认为它应该可以工作。

看看解析对象的方法
var_dump($order->get_data())时的输出是什么?@RJK这是输出:@Dennis你能用
var\u export
做另一个吗?这将使调试这种大小的数组变得更容易。@Dennis正在查看原始转储,请尝试以下操作,
$data=$order->get_data()$data['meta_data'][8]->\u enviso\u order\u id
谢谢!很有魅力/