#php #arrays #json
#php #массивы #json
Вопрос:
Я получаю данные json из конечной точки api, я хотел бы добавить ключевое значение в массив, который я получаю. Это моя функция:
$magazines = Magazine::all();
foreach ($magazines as $magazine) {
$result = file_get_contents('http://customer.pages.com/?customer=' . $magazine->visio_link_prefix . 'amp;action=latest');
$issues[] = json_decode($result, true);
}
foreach ($issues as $issue) {
Issue::create([
''
'title' => $issue['papers'][0]['title'],
'date' => $issue['papers'][0]['date'],
'foldername' => $issue['papers'][0]['foldername'],
'thumb' => $issue['papers'][0]['thumb'],
'thumbmedium' => $issue['papers'][0]['thumbmedium'],
]);
}
Массив, который я получаю от конечной точки, выглядит следующим образом:
array:24 [▼
0 => array:1 [▼
"papers" => array:1 [▼
0 => array:11 [▼
"title" => "News- 2014-10-22"
"date" => "2014-10-22"
"expires" => ""
"catalog" => 24
"foldername" => "News"
"folder" => 4965
"pages" => 132
"sectionstarts" => "1"
"sectioncount" => 1
"thumb" => "www.customer.pages.com/news/24/teasers/small.jpg"
"thumb_medium" => "www.customer.pages.com/news/24/teasers/medium.jpg"
]
]
]
1 => array:1 [▶]
2 => array:1 [▶]
3 => array:1 [▶]
4 => array:1 [▶]
5 => array:1 [▶]
6 => array:1 [▶]
7 => array:1 [▶]
8 => array:1 [▶]
9 => array:1 [▶]
10 => array:1 [▶]
11 => array:1 [▶]
12 => array:1 [▶]
13 => array:1 [▶]
14 => array:1 [▶]
15 => array:1 [▶]
16 => array:1 [▶]
17 => array:1 [▶]
18 => array:1 [▶]
19 => array:1 [▶]
20 => array:1 [▶]
21 => array:1 [▶]
22 => array:1 [▶]
23 => array:1 [▶]
]
Итак, в моем цикле foreach я хотел бы добавить пару ключевых значений 'magazineId' => $magazine->id
к каждому из вышеупомянутых 'papers'
массивов. Чтобы позже я мог использовать $issue['papers'][0]['magazineId']
для получения значения $magazine->id
. Не уверен, как это сделать?
Комментарии:
1. Пожалуйста, отредактируйте дамп из конечной точки, потому что это неверно. Это дамп
$issues
. Дамп конечной точки будет выглядеть примерно так: массив (размер = 1) ‘papers’ => массив (размер = 1) 0 => массив (размер = 11) ‘title’ => строка ‘Mamma- 2014-10-22’ (длина = 17) ‘date’ => строка ‘2014-10-22’ (длина = 10) ‘expires’ => строка » (длина = 0) ‘catalog’ => int 24 …
Ответ №1:
Это исправление к вашему коду должно сработать:
foreach ($magazines as $magazine) {
$result = file_get_contents('http://customer.pages.com/?customer=' . $magazine->visio_link_prefix . 'amp;action=latest');
$issue = json_decode($result, true);
foreach($issue['papers'] as $paperKey => $paper) {
$issue['papers'][$paperKey]['magazineId'] = $magazine->id;
}
$issues[] = $issue;
}
foreach ($issues as $issue) {
Issue::create([
'magazineId' => $issue['papers'][0]['magazineId'],
'title' => $issue['papers'][0]['title'],
'date' => $issue['papers'][0]['date'],
'foldername' => $issue['papers'][0]['foldername'],
'thumb' => $issue['papers'][0]['thumb'],
'thumbmedium' => $issue['papers'][0]['thumbmedium'],
]);
}
И вторая версия, в которой у вас есть только один ключ magazineId для одного выпуска:
foreach ($magazines as $magazine) {
$result = file_get_contents('http://customer.pages.com/?customer=' . $magazine->visio_link_prefix . 'amp;action=latest');
$issue = json_decode($result, true);
$issue['magazineId'] = $magazine->id;
$issues[] = $issue;
}
Комментарии:
1. Я получаю неопределенный индекс: papers для первой части вашего ответа, а для второй части I magazine-> id не находится внутри массива papers
2. Не могли бы вы предоставить var_dump для $issue сразу после $issue = json_decode($result, true);
3.
array (size=1) 'papers' => array (size=1) 0 => array (size=11) 'title' => string 'Mamma- 2014-10-22' (length=17) 'date' => string '2014-10-22' (length=10) 'expires' => string '' (length=0) 'catalog' => int 24 ...
Ответ №2:
Не могли бы вы, пожалуйста, попробовать код ниже? В первом foreach я добавил массив в $issue.
$magazines = Magazine::all();
foreach ($magazines as $magazine) {
$result = file_get_contents('http://customer.pages.com/?customer=' . $magazine->visio_link_prefix . 'amp;action=latest');
$issues[] = array('magazine_id' => $magazine->id, 'result' => json_decode($result, true);
}
foreach ($issues as $issue) {
Issue::create([
'magazine_id' => $issue['magazine_id'],
'title' => $issue['result']['papers'][0]['title'],
'date' => $issue['result']['papers'][0]['date'],
'foldername' => $issue['result']['papers'][0]['foldername'],
'thumb' => $issue['result']['papers'][0]['thumb'],
'thumbmedium' => $issue['result']['papers'][0]['thumbmedium'],
]);
}
Комментарии:
1. Затем я получаю такой массив,
0 => array:2 [▼ "magazineId" => 6 0 => array:1 [▼ "papers" => array:1 [▼ 0 => array:11 [▼ ...rest of the array ] ] ]
который я хотел бы поместитьmagazine id
внутрьpapers
массива, если это возможно2. Привет, @Marco; первый блок кода @krasipenkov может вам подойти. Вы пробовали это?