【发布时间】:2020-09-07 06:18:08
【问题描述】:
我一直在努力正确输出我从 REST API 响应中收到的 json 数据的内容。我进行了很多搜索并尝试了不同的方法,但我注意到每个人的方法总是独一无二的……下面是我的代码……特别要考虑的是“headers_field”,它是一个包含很多值和键的数组……我想要也用键输出这些值......虽然(“数据”)有两个值......下面是我也尝试过的,但我只是从循环中得到第一个结果,而它返回(“headers_field ": Array), ("box: Array")..我使用了 Curl。请往下看。谢谢。
{
"data": [
{
"approved": null,
"approved_user_id": null,
"boxes": [],
"created": "2020-05-19T21",
"created_at": "2020-05-19T21",
"edited": null,
"edited_in_affiliate": null,
"edited_in_hdr": null,
"edited_in_web_app": null,
"erp_project_id": null,
"error_description": "",
"header_fields": [
{
"boxes": [],
"code": "creditor_number",
"data_type": "",
"error": "",
"feature_id": nvnnn,
"value": "hhhhh"
},
{
"boxes": [],
"code": "payment_account_number",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "order_number",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "total_amount_incl_vat",
"data_type": "",
"error": "",
"feature_id": mmm
"value": "hhh"
},
{
"approved": null,
"approved_user_id": null,
"boxes": [],
"created": "2020-05-19",
"created_at": "2020-05-19",
"edited": null,
"edited_in_affiliate": null,
"edited_in_hdr": null,
"edited_in_web_app": null,
"erp_project_id": null,
"error_description": "",
"header_fields": [
{
"boxes": [],
"code": "reference",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "payment_swift_bic",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "recipient_vat_reg_no",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "joint_payment_id",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "catalog_debitor_id",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "case_number",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "payment_account_number",
"data_type": "",
"error": "",
"value": ""
},
{
"boxes": [],
"code": "payment_iban",
"data_type": "",
"error": "",
"value": ""
}
],
"id": 00000,
"image": "https://skkkkkllllllllll
"line_items": [],
"note": "",
"organization_id": 11111,
"organization_voucher_id": 7777,
"page_count": 1,
"status": "successful",
"type": "voucher",
"upload_type": "affiliate",
"uploaded_by_user_id": 0000001
"user_payment_method": "",
"user_voucher_type": ""
}
],
"meta": {
"count": 2
}
}
我的循环操作
.....
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$results= curl_exec($ch);
$g= json_decode($results, true);
$i=0;
$g_length =count($g["data"]);//to count through the child array
for ($i=0; $i < ($g_length);$i++)
{
$k= $g["data"][$i]; //asssigning the array position to a variable
foreach($k as $mydata=>$mvalue) {
$hey = trim($mvalue); //Removes white spaces
if ($mvalue !=="")
echo $mydata. " : " . $mvalue . "<br>";
else
echo "This is empty. <br/>";
///////////////////////////////////////////
foreach($mvalue as $lkey=>$lvalue)
{
$u=is_array($mvalue);
if(($u) and !empty($u))
echo $lkey. ":" . $lvalue. "<br>";
else
echo "what? <br/>";
///////////
foreach($lvalue as $okey=>$ovalue)
{
echo $okey. ":". $value. "</n>";
/////
foreach($ovalue as $key=>$value)
{
$v=is_array($value);
if(($v) and !empty($v))
echo $key. ":" . $value. "<br>";
else
echo "hello";
//print_r($key);
/////
}
}
//////////
}
//////////////////////////////////////////
}
【问题讨论】:
-
我了解您真诚地尝试解决此问题并且您需要帮助。然而,关于这个主题的“雪花问题”(“每个人都是独一无二的”)每天都会在这里发布很多次。 Stack Overflow 被“如何迭代这个多维数组”这些问题过度饱和,而这些问题(正如你所承认的)对未来的研究人员几乎没有帮助。因此,Stack Overflow 保留数百个这样的问题几乎没有价值。
-
如果您想要特定的值而不是每条数据,那么可以为您提供更具体/更窄的答案。这就是为什么 Toby 的答案是通用的,而不是专门帮助您访问命名的关键数据的原因。对于需要“打开”并显示
Array()输出的开发人员,解决方案是非常简单地循环属于该特定键的数据。用连续的循环-n-打印波来探索您的数据并没有错,直到您得到您需要的东西。 -
我看到了您与我的问题相关联的两个链接;老实说,他们;对这种事情不熟悉的人尤其没有帮助。如果他们确实回答了这个问题,因为它在这里以更深入和更简单的方式回答,我会理解并使用它们。这就是为什么我非常感谢@Toby Harris 用最基本的术语简化了它。但是,我也很感谢您发送的最后一个链接。这很多。谢谢。
标签: php json rest curl multidimensional-array