如何在类似PHP的数组对象中访问JSON元素?

如何在类似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

从触发开始,我收到一条消息,当我在电子邮件中输出它时,它看起来是这样的:

数组{“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”;“{,“优惠券行”:[]}


您能告诉我访问此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);