如何在类似PHP的数组对象中访问JSON元素?
从触发开始,我收到一条消息,当我在电子邮件中输出它时,它看起来是这样的: 数组{“id”:1154,“父项id”:0,“状态”:“待定”,“货币”:“欧元”,“版本”:“3.2.3”,“价格包括税”:真,“创建日期”:{“日期”:“2017-12-15 15:58:42.000000,“时区类型”:1,“时区”:“+00:00”},“修改日期”:{“日期”:“2017-12-15 15:58:42.000000,“时区类型”:1,“时区”:“+00:00”},“折扣税”:“0”,“运费税”:“0”,“运费税”:“0”,“运费税”:“0”,“运费税”:“0”,“总额”:“6.50”,“总税”:“0”,“客户id”:“0”,“订单号”:“wc\U订单5a33f1321ba43”,“账单”:“{”第一名“:“彼得”,“姓氏”:“帕克”,“公司”:“地址”:“面包师1”:“面包师” 街道“,”地址2“:”2“,”城市“:”伦敦“,”州“:”邮政编码“:”50668“,”国家“:”DE“,”电子邮件“:”something@gmail.com“,”电话“:”01627423“},”,”送货“:{”姓“:”彼得“,”姓“:”帕克“,”公司“,”地址“:”贝克“,” 街道“,”地址“:”2“,”城市“:”伦敦“,”州“:”邮政编码“:”50668“,”国家“:”德“,”付款方式“:”cod“,”付款方式“:”头衔“:”贝 交易 _id“:”客户ip地址“:”客户用户代理“:”mozilla/5.0 (macintosh;英特尔mac os x 10_13_2)applewebkit/537.36(类似于khtml 壁虎)铬/布拉布拉 safari/537.36,“created_via”:“checkout”,“customer_note”:“date_completed”:null,“date_paid”:null,“cart_hash”:“be97db19eba58864b9166961ce22a706”,“number”:“1154”,“meta_data”:[{“id”:4731,“key”:“billing_title”,“value”:“1”;“value”:“1”;“lines”;“lines”;“lines”;{“18”;{“tax@],“shipping lines”;“{,“优惠券行”:[]}如何在类似PHP的数组对象中访问JSON元素?,php,json,woocommerce,Php,Json,Woocommerce,从触发开始,我收到一条消息,当我在电子邮件中输出它时,它看起来是这样的: 数组{“id”:1154,“父项id”:0,“状态”:“待定”,“货币”:“欧元”,“版本”:“3.2.3”,“价格包括税”:真,“创建日期”:{“日期”:“2017-12-15 15:58:42.000000,“时区类型”:1,“时区”:“+00:00”},“修改日期”:{“日期”:“2017-12-15 15:58:42.000000,“时区类型”:1,“时区”:“+00:00”},“折扣税”:“0”,“运费税”:“0
您能告诉我访问此JSON元素的可能性吗?这样我就可以从
$order
对象的某些部分构造消息了?我尝试了将$data=json\u decode($order)
与$data->date\u created
结合使用,但在我转储最后一部分时,这并没有给我任何帮助。它是json,除了开头的数组
部分(假定这是您尝试访问date\u created):
您可以像以前一样使用json\u decode()
,但是date\u created
也是一个数组,因此您还需要从中选择所需的项目
$data = json_decode($order, true);
echo $data['date_created']['date']; // 2017-12-15 15:58:42.000000
因此,如果您想要客户名称,例如:
echo $data['billing']['first_name'].' '.$data['billing']['last_name'];
通过打印($data)
可以看到它的结构
Array
(
[id] => 1154
[parent_id] => 0
[status] => pending
[currency] => EUR
[version] => 3.2.3
[prices_include_tax] => 1
[date_created] => Array
(
[date] => 2017-12-15 15:58:42.000000
[timezone_type] => 1
[timezone] => +00:00
)
[date_modified] => Array
(
[date] => 2017-12-15 15:58:42.000000
[timezone_type] => 1
[timezone] => +00:00
)
[discount_total] => 0
[discount_tax] => 0
[shipping_total] => 0
[shipping_tax] => 0
[cart_tax] => 0
[total] => 6.50
[total_tax] => 0
[customer_id] => 0
[order_key] => wc_order_5a33f1321ba43
[billing] => Array
(
[first_name] => Peter
[last_name] => Parker
[company] =>
[address_1] => Baker Str.
[address_2] => 2
[city] => London
[state] =>
[postcode] => 50668
[country] => DE
[email] => something@gmail.com
[phone] => 01627423
)
[shipping] => Array
(
[first_name] => Peter
[last_name] => Parker
[company] =>
[address_1] => Baker Str.
[address_2] => 2
[city] => London
[state] =>
[postcode] => 50668
[country] => DE
)
[payment_method] => cod
[payment_method_title] => Bei Abholung
[transaction _id] =>
[customer_ip_address] => ...
[customer_user_agent] => mozilla/5.0 (macintosh; intel mac os x 10_13_2) applewebkit/537.36 (khtml, like gecko) chrome/blabla safari/537.36
[created_via] => checkout
[customer_note] =>
[date_completed] =>
[date_paid] =>
[cart_hash] => be97db19eba58864b9166961ce22a706
[number] => 1154
[meta_data] => Array
(
[0] => Array
(
[id] => 4731
[key] => _billing_title
[value] => 1
)
[1] => Array
(
[id] => 4732
[key] => _shipping_title
[value] => 1
)
)
[line_items] => Array
(
[18] => Array
(
)
)
[tax_lines] => Array
(
)
[shipping_lines] => Array
(
[19] => Array
(
)
)
[fee_lines] => Array
(
)
[coupon_lines] => Array
(
)
)
如果您想要一个简单的输出,您可以使用递归函数遍历数组,该函数将生成您的电子邮件
echo '<h2>Order Details</h2>'.PHP_EOL;
echo order_details(json_decode($json, true));
function order_details($items, $str = null) {
foreach ($items as $key => $item) {
if (is_array($item)) {
$str .= PHP_EOL.'<h3>'.ucwords(str_replace('_', ' ', $key)).'</h3>'.PHP_EOL;
$str .= order_details($item, $str);
} else {
$str .= '<b>'.ucwords(str_replace('_', ' ', $key)).'</b>: '.$item.'</br>'.PHP_EOL;
}
}
return $str;
}
echo“订单详细信息”.PHP\u EOL;
回波顺序详细信息(json解码($json,true));
函数顺序_详细信息($items,$str=null){
foreach($key=>$item的项目){
if(is_数组($item)){
$str.=PHP_EOL.'''.ucwords(str_replace('''u','$key))。'.PHP_EOL;
$str.=订单详细信息($item$str);
}否则{
$str.=''.ucwords(str_replace('','',$key)):'.$item.'.PHP_EOL;
}
}
返回$str;
}
其输出如下所示:
订单详细信息
身份证号码:1154
父Id:0
状态:待定
货币:欧元
版本:3.2.3
价格含税:1
创建日期
日期:2017-12-15 15:58:42.000000
时区类型:1
时区:+00:00
修改日期
日期:2017-12-15 15:58:42.000000
时区类型:1
时区:+00:00
折扣总额:0
折扣税:0
装运总数:0
运费税:0
购物车税:0
总数:6.50
税款总额:0
客户Id:0
订单编号:wc_订单_5a33f1321ba43
演员表
名字:彼得
姓:帕克
公司:
地址1:贝克街
地址2:2
城市:伦敦
声明:
邮政编码:50668
国家:德
电邮:something@gmail.com
电话:01627423
航运
名字:彼得
姓:帕克
公司:
地址1:贝克街
地址2:2
城市:伦敦
声明:
邮政编码:50668
国家:德
付款方式:货到付款
付款方式名称:Bei Abholung
事务Id:
客户Ip地址:
客户用户代理:mozilla/5.0(macintosh;英特尔mac os x 10_13_2)applewebkit/537.36(khtml,如gecko)chrome/blabla safari/537.36
创建方式:签出
客户注意:
完成日期:
支付日期:
购物车哈希:be97db19eba58864b9166961ce22a706
电话:1154
元数据
0
身份证号码:4731
关键字:\账单\标题
价值:1
1.
身份证号码:4732
关键字:\运输\标题
价值:1
行项目
18
税项
航运公司
19
收费线
息票行
当您使用
$data = json_decode($order);
它将创建一个对象,要将该对象转换为关联数组,只需传递一个参数
$data = json_decode($order, true);
谢谢<代码>数组是输出的一部分,而不是我尝试的一部分。我只是添加了
$order
作为电子邮件的邮件正文。我想这就是我无法正确访问JSON的部分原因!?你应该检查它是否在$order
的字符串中,如果它在,你应该找到它被添加的位置并修复它,因为它不应该在那里,如果它不是json\u decode($order,true)
应该返回一个数组,如果是,它将返回null
。如果你因为某种原因不能移除它,你可以通过检查它是否在那里,以及它是否被移除来解决问题-
$data = json_decode($order, true);