Php 在对象中搜索元键并获取值
我在Woocommerce中对当前订单进行了var_转储。输出是一个大的数据对象: 在这个对象的某个地方是密钥_enviso_order_id和_enviso_order_number。是否有可能在对象中进行“搜索”并获得相应的值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
$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
谢谢!很有魅力/