存储paypal api中复杂json返回数组的php变量

存储paypal api中复杂json返回数组的php变量,php,arrays,json,variables,Php,Arrays,Json,Variables,我正在使用PayPal API为我提供有关特定交易的信息。我正在使用PHP和curl,一切都很好。PayPal返回的结果是一个JSON对象 下面是在$JSON=JSON\u decode($result,true)之后将JSON对象发送给print_r($JSON)时JSON对象给我的输出示例 正如您所看到的,JSON对象非常复杂。。。至少对我来说。我需要提取一些值并将它们保存到变量中 我需要提取交易开始日期、项目代码、备用全名、第1行、城市、州、邮政编码、电子邮件地址以及其他超复杂的值,如价格

我正在使用PayPal API为我提供有关特定交易的信息。我正在使用PHP和curl,一切都很好。PayPal返回的结果是一个JSON对象

下面是在$JSON=JSON\u decode($result,true)之后将JSON对象发送给print_r($JSON)时JSON对象给我的输出示例

正如您所看到的,JSON对象非常复杂。。。至少对我来说。我需要提取一些值并将它们保存到变量中

我需要提取交易开始日期、项目代码、备用全名、第1行、城市、州、邮政编码、电子邮件地址以及其他超复杂的值,如价格等,这些都有好几层

我不是要求任何人为我写代码,但如果有人能解释我如何遍历它,以达到我需要的


非常感谢您的光临。

当您有一个包含许多嵌套级别(可能会更改)的数组结构时,您可以使用递归函数筛选所需的项:

在本例中,我们循环浏览要从源数组检索的项的列表(array
$pines
)。在
foreach()。所有结果都存储在数组
$result
中。当然,如果您只需要搜索一个项目,您可以为该特定项目调用
find()

<?php
$needles = ['transaction_initiation_date', 'item_code', 'alternate_full_name', 'line1', 'city', 'state', 'postal_code', 'email_address', 'item_unit_price'];

foreach($needles as $needle) {
    $result[$needle] = find($arr, $needle)[0];
}

function find(array $arr, string $needle, array &$result = []) {
    foreach($arr as $key => $value) {
        if($key !== 'item_unit_price' && is_array($value)) {
            find($value, $needle, $result);
        } else {
            if($key === $needle) {
                $result[] = $value;
                break;
            }
        }
    }
    return $result;
}
“商品单价”也包含一个数组

因此,如果要筛选包含数组的任何键,可以创建它们的列表,并将条件更改为:

if (!in_array($key, ['item_unit_price',
                         'fee_amount', 
                         'tax_amount'], true) && is_array($value)) {
至于源数组中可能不存在的
$pines
数组中的项的问题(例如“line2”),请更改:

??
如果第一个操作数存在且不为空,则返回第一个操作数,否则返回第二个操作数。(在PHP7中介绍)


在线打印很难理解。请使用echo“”;和var_导出($JSON)。您将收到一个格式化的PHP代码。编辑您的问题并查看格式化的代码。我在这里没有看到任何复杂的内容。它只是循环和数组访问,这两个都是该语言的基础。谢谢你说它对你来说并不复杂。。。显然,这是为了我,这就是我来这里寻求帮助的原因。谢谢你的“帮助”,这绝对是最好的回答。非常感谢!你不仅帮了我,而且我还可以将你的函数添加到我的库中,以便将来使用!我在获取另外两个值时遇到问题…我需要“费用金额”['value'],在本例中为-10.88,在本例中为15.71。当我尝试将“费用金额”和/或“税费金额”添加到针头数组中,然后像对待商品单价那样调用它时,我得到了以下错误:注意:未定义的偏移量:在C:\xampp\htdocs\retail\paypal.php的第62行,这是foreach循环中的“$result[$needle=find($json,$needle)[0];”行……还有注意:尝试访问null类型值的数组偏移量"当回音时。有什么区别吗?另外,当我将'line2'添加到$Piners数组时,如果特定的订单没有第二个地址行,它会抛出一个错误…在有两个地址行的订单上没有错误…所以我想需要添加一些不会在没有结果的情况下破坏代码的内容…但我不知道如何处理o要么…=/Hey@Tim B,更新了答案。希望这对你有所帮助。如果你有后续问题,我建议你发布一个新的问题,并提供详细信息。小心!非常感谢你向我介绍空合并操作符???。我现在要尝试所有的方法
echo 'item code : ' . $result['item_code'];
echo '<br />';
echo 'city : ' . $result['city'];
echo '<br />';
echo 'price : ' . $result['item_unit_price']['value'];
echo '<br />';

item code : LUMI23398
city : La**od
price : 349.00
if($key !== 'item_unit_price' && is_array($value)) {
if (!in_array($key, ['item_unit_price',
                         'fee_amount', 
                         'tax_amount'], true) && is_array($value)) {
$result[$needle] = find($arr, $needle)[0];
$result[$needle] = find($arr, $needle)[0] ?? 'n/a';