#php #arrays #multidimensional-array
#php #массивы #многомерный массив
Вопрос:
Я хочу выполнить цикл через многомерный массив. Я делал это несколько раз раньше, но этот вызов API сводит меня с ума. Может быть, мне следует прекратить кодирование через 10 часов. :/
Моя цель — извлечь сертификат возраста в США, где note =»» из этого вызова. Вызывается переменная $movie
$url = "https://api.themoviedb.org/3/movie/" . $movieID . "?api_key=" . $apiKey . "amp;" . $language . "amp;" . $sortBy . "amp;append_to_response=release_dates"; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$movie = json_decode($data); // decode the JSON feed
foreach:
foreach ($movie->release_dates as $result) {
echo $result->release_dates;
}
обеспечивает:
array(31) {
[0]=>
object(stdClass)#12 (2) {
["iso_3166_1"]=>
string(2) "FR"
["release_dates"]=>
array(1) {
[0]=>
object(stdClass)#13 (5) {
["certification"]=>
string(1) "U"
["iso_639_1"]=>
string(0) ""
["note"]=>
string(0) ""
["release_date"]=>
string(24) "2018-02-07T00:00:00.000Z"
["type"]=>
int(3)
}
}
}
[1]=>
object(stdClass)#14 (2) {
["iso_3166_1"]=>
string(2) "US"
["release_dates"]=>
array(2) {
[0]=>
object(stdClass)#15 (5) {
["certification"]=>
string(5) "PG-13"
["iso_639_1"]=>
string(0) ""
["note"]=>
string(0) ""
["release_date"]=>
string(24) "2018-01-26T00:00:00.000Z"
["type"]=>
int(3)
}
[1]=>
object(stdClass)#16 (5) {
["certification"]=>
string(5) "PG-13"
["iso_639_1"]=>
string(0) ""
["note"]=>
string(0) ""
["release_date"]=>
string(24) "2018-04-24T00:00:00.000Z"
["type"]=>
int(5)
}
}
}
[2]=>
object(stdClass)#17 (2) {
["iso_3166_1"]=>
string(2) "CA"
["release_dates"]=>
array(1) {
[0]=>
object(stdClass)#18 (5) {
["certification"]=>
string(2) "PG"
["iso_639_1"]=>
string(0) ""
["note"]=>
string(0) ""
["release_date"]=>
string(24) "2018-01-26T00:00:00.000Z"
["type"]=>
int(3)
}
}
}
[3]=>
object(stdClass)#19 (2) {
["iso_3166_1"]=>
string(2) "LT"
["release_dates"]=>
array(1) {
[0]=>
object(stdClass)#20 (5) {
["certification"]=>
string(4) "N-13"
["iso_639_1"]=>
string(0) ""
["note"]=>
string(0) ""
["release_date"]=>
string(24) "2018-01-26T00:00:00.000Z"
["type"]=>
int(3)
}
}
}
}
Я не знаю, как поступить. В этом случае это должен быть R-рейтинг.
Комментарии:
1. Поделитесь некоторым кодом о том, как вы пытаетесь это сделать
Ответ №1:
Попробуйте что-то подобное:
$data = '
[
{
"iso" : "FR",
"dates" : [
{
"note": "",
"date": "06.09.2020"
}
]
},
{
"iso" : "US",
"dates" : [
{
"note": "",
"date": "06.09.2020"
},
{
"note": "",
"date": "07.09.2020"
},
{
"note": "not empty",
"date": "08.09.2020"
}
]
},
{
"iso" : "US",
"dates" : [
{
"note": "not empty",
"date": "09.09.2020"
},
{
"note": "",
"date": "10.09.2020"
},
{
"note": "not empty",
"date": "11.09.2020"
}
]
}
]';
// use json_decode with true to get a associative array.
$movies = json_decode($data, true);
$dates = array();
foreach ($movies as $movie) {
if ($movie['iso'] === 'US' amp;amp; isset($movie['dates']) amp;amp; is_array($movie['dates'])) {
foreach ($movie['dates'] as $date) {
if (isset($date['note']) amp;amp; empty($date['note']) amp;amp; isset($date['date']) amp;amp; $date['date']) {
$dates[] = $date['date'];
}
}
}
}
echo '<pre>';
print_r($dates);
echo '</pre>';
И в качестве ответа:
Array
(
[0] => 06.09.2020
[1] => 07.09.2020
[2] => 10.09.2020
)
Комментарии:
1. Спасибо. но это не работает. похоже, проблема в сочетании массивов и объектов.
2. все еще не работает.
var_dump($result);
равно нулю. насколько я могу видеть, предоставленный код выглядит великолепно. Я не знаю, почему это не работает.3. Если это то, что вы получаете после синтаксического анализа json (имеется в виду ваш пример), это должно сработать, проверьте, используете ли вы правильные имена ключей для получения вложенных массивов и значений, которые вам нужны.