Многомерный массив JSON In PHP? - PullRequest
0 голосов
/ 09 марта 2020

Я не так уж хорошо знаком с JSON, тем более, пытаясь вытянуть значения из него в PHP, поэтому при попытке сделать это у меня возникает головная боль.

Если бы это не был вложенный / многомерный массив, это было бы простым заданием поиска, копирования и вставки, но проблема, с которой я столкнулся, заключается в том, что я могу извлечь только первый результат из массива. Конечно, мой код немного беспорядок, потому что я пробовал новые методы и взламывал его, пытаясь получить ожидаемый результат, но я не уверен, как обработать данные так, чтобы просто потянуть информация, которую я ищу.

Я очень ценю любые советы / рекомендации, которые вы могли бы дать, чтобы научить меня использовать все результаты, а не только первые. Я уверен, что это что-то простое, я просто не вижу, но я некоторое время занимался этим и, наконец, решил, что буду просить о помощи.

Вот кодирование PHP, которое я используя в данный момент только один результат:

<code>$url = "https://somewhere.com/give-api/v1/donors/?key=***&token=***&number=999";
$data = file_get_contents($url);
$donors = json_decode($data, true);
$count = 0;
$output = array();

foreach ($donors as $donor) {
  $spent = substr($donor[$count]['stats']['total_spent'], 0, strpos($donor[$count]['stats']['total_spent'], "."));
  if ($spent != 0)
  {
    $level = check_spent($spent);
    //       ^ Custom function, just returns a level number based on the $spent value
    $output += [$spent, $level, $donor[$count]['info']['first_name'] . " " . $donor[$count]['info']['last_name']];
  }
  $count++;
}

echo '<pre>';
print_r($output);
echo '
';

Вот анонимная версия данных:

{
"donors": [
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "8",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "1",
            "total_spent": "40.000000"
        },
        "address": {
            "billing": [
                {
                    "line1": "1234 Some Pl",
                    "line2": "",
                    "city": "Somewhere",
                    "state": "DC",
                    "country": "US",
                    "zip": "12345"
                }
            ]
        }
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "7",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "1",
            "total_spent": "50.000000"
        },
        "address": {
            "billing": [
                {
                    "line1": "1234 Some Pl",
                    "line2": "",
                    "city": "Somewhere",
                    "state": "DC",
                    "country": "US",
                    "zip": "12345"
                }
            ]
        }
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "6",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "1",
            "total_spent": "100.000000"
        },
        "address": {
            "billing": [
                {
                    "line1": "1234 Some Pl",
                    "line2": "",
                    "city": "Somewhere",
                    "state": "DC",
                    "country": "US",
                    "zip": "12345"
                }
            ]
        }
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "5",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "0",
            "total_spent": "0.000000"
        },
        "address": []
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "4",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "0",
            "total_spent": "0.000000"
        },
        "address": []
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "3",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "1",
            "total_spent": "50.000000"
        },
        "address": {
            "billing": [
                {
                    "line1": "1234 Some Pl",
                    "line2": "",
                    "city": "Somewhere",
                    "state": "DC",
                    "country": "US",
                    "zip": "12345"
                }
            ]
        }
    },
    {
        "info": {
            "user_id": "",
            "username": "",
            "display_name": "",
            "donor_id": "2",
            "title_prefix": "",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john@doe.com"
        },
        "stats": {
            "total_donations": "1",
            "total_spent": "50.000000"
        },
        "address": {
            "billing": [
                {
                    "line1": "1234 Some Pl",
                    "line2": "",
                    "city": "Somewhere",
                    "state": "DC",
                    "country": "US",
                    "zip": "12345"
                }
            ]
        }
    }
],
"request_speed": 0.0026030540466308594
}

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Посмотрите на данные, которые вы получите после json_decode, вы, вероятно, получите массив только с одним ключом: donors.

print_r($donors);

Если это так, сделайте это вместо итерации:

foreach ($donors['donors'] as $donor) {
  // do your work
}
0 голосов
/ 09 марта 2020

$ donons - это вся карта, $ don [[donons]] - это то место, где вам нужно перебрать

...