Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-JSON编码输出只包含1个XML条目,而不是多个XML条目_Php_Json_Xml_Php Curl - Fatal编程技术网

PHP-JSON编码输出只包含1个XML条目,而不是多个XML条目

PHP-JSON编码输出只包含1个XML条目,而不是多个XML条目,php,json,xml,php-curl,Php,Json,Xml,Php Curl,更新: { "email": "example1@example1.com", "first_name": "John", "last_name": "Doe", "billing": { "first_name": "John", "last_

更新:

{
    "email": "example1@example1.com",
    "first_name": "John",
    "last_name": "Doe",
    "billing": {
        "first_name": "John",
        "last_name": "Doe",
        "postcode": "10000"
    }
}[Finished in 0.4s]
前任职务:

好的,我让代码为一个客户完美地工作。现在我遇到了另一个问题,如果我想接收多个客户作为JSON输出,我该怎么做

我已经在状态为C的帐户下创建了第二个条目,并修改了迄今为止收到的代码部分,基本上输出name/email/。。。来自所有状态为C的帐户。但是,我只收到它看到的第一个帐户。可能在什么地方出错了

$document = new DOMDocument();
$document->loadXML($response);
$xpath = new DOMxpath($document);

$json = [];
foreach ($xpath->evaluate('(/eExact/Accounts)') as $account) {
    $json['email'] = $xpath->evaluate('string(Account[@status="C"]/Email)', $account);
    
    $json['first_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account);
    $json['last_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account);
    $json['billing'] = [
      'first_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account),
      'last_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account),
      'postcode'=> $xpath->evaluate('string(Account[@status="C"]/Address[@default="1"]/PostalCode)', $account),
    ];

    // ...
}

$customer = json_encode($json, JSON_PRETTY_PRINT);
echo $customer; 
输出:

{
    "email": "example1@example1.com",
    "first_name": "John",
    "last_name": "Doe",
    "billing": {
        "first_name": "John",
        "last_name": "Doe",
        "postcode": "10000"
    }
}[Finished in 0.4s]

我实际上想要的是这样的东西:[或者换句话说,所有状态C帐户]

 {
        "email": "example1@example1.com",
        "first_name": "John",
        "last_name": "Doe",
        "billing": {
            "first_name": "John",
            "last_name": "Doe",
            "postcode": "10000"
        }
 {
        "email": "example2@example2.com",
        "first_name": "Steve",
        "last_name": "Doe",
        "billing": {
            "first_name": "Steve",
            "last_name": "Doe",
            "postcode": "20000"
        }

每次迭代都会覆盖
$json
数组键。您将其设置为一维数组,需要的是多维数组(其中每个元素都是另一个数组):

foreach($xpath->evaluate(“(/eExact/Accounts)”作为$account){
$json[]=[
'email'=>$xpath->evaluate('string(Account[@status=“C”]/email)',$Account),
'first_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/FirstName)'$Account),
'last_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/LastName)'$Account),
“账单”=>[
'first_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/FirstName)'$Account),
'last_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/LastName)'$Account),
“postcode”=>$xpath->evaluate('string(Account[@status=“C”]/Address[@default=“1”]/PostalCode)',$Account),
],
];
}

这里的键是
$json[]=…
-这告诉PHP在数组中创建一个新元素,并为其分配以下值。

每次迭代都会覆盖
$json
数组键。您将其设置为一维数组,需要的是多维数组(其中每个元素都是另一个数组):

foreach($xpath->evaluate(“(/eExact/Accounts)”作为$account){
$json[]=[
'email'=>$xpath->evaluate('string(Account[@status=“C”]/email)',$Account),
'first_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/FirstName)'$Account),
'last_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/LastName)'$Account),
“账单”=>[
'first_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/FirstName)'$Account),
'last_name'=>$xpath->evaluate('string(Account[@status=“C”]/Contact[@default=“1”]/LastName)'$Account),
“postcode”=>$xpath->evaluate('string(Account[@status=“C”]/Address[@default=“1”]/PostalCode)',$Account),
],
];
}

这里的关键是
$json[]=…
-这告诉PHP在数组中创建一个新元素,并为其分配后面的值。

您正在创建一个数组,并在每次循环中覆盖它。有多种附加方式,但使用现有代码可以执行以下操作:

foreach ($xpath->evaluate('(/eExact/Accounts)') as $account) {
    $json['email'] = $xpath->evaluate('string(Account[@status="C"]/Email)', $account);        
    $json['first_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account);
    $json['last_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account);
    $json['billing'] = [
      'first_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account),
      'last_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account),
      'postcode'=> $xpath->evaluate('string(Account[@status="C"]/Address[@default="1"]/PostalCode)', $account),
    ];
    // append to your result here
    $result[] = $json;
}
$customer = json_encode($result, JSON_PRETTY_PRINT);
echo $customer; 

您正在创建一个数组,并在每次循环中覆盖它。有多种附加方式,但使用现有代码可以执行以下操作:

foreach ($xpath->evaluate('(/eExact/Accounts)') as $account) {
    $json['email'] = $xpath->evaluate('string(Account[@status="C"]/Email)', $account);        
    $json['first_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account);
    $json['last_name'] = $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account);
    $json['billing'] = [
      'first_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/FirstName)', $account),
      'last_name' => $xpath->evaluate('string(Account[@status="C"]/Contact[@default="1"]/LastName)', $account),
      'postcode'=> $xpath->evaluate('string(Account[@status="C"]/Address[@default="1"]/PostalCode)', $account),
    ];
    // append to your result here
    $result[] = $json;
}
$customer = json_encode($result, JSON_PRETTY_PRINT);
echo $customer;