#php #arrays
Вопрос:
Поэтому я получаю данные из api и хочу сохранить результаты в массиве. Но в результатах есть некоторые массивы внутри них, и эти данные я хочу повторить и добавить в массив.
Это работает для повторения результатов, а также массива результатов, но когда я хочу сохранить данные внутри БД, например, первые данные внутреннего массива отлично сохраняются внутри родительского результата, но вторая запись получает данные первого внутреннего массива, а вторая и третья получают первый и второй и так далее. Я думаю, что я делаю что-то не так с циклами или должен очищать массив после каждой итерации, но тогда я получаю только последнюю запись внутреннего массива в конце…
Итак, это выглядит так:
foreach($results as $result) {
// add data e.g. inside DB
foreach($result->inner as $inner) {
$inner_fields[] = [
'field_2312312' => $inner->name,
'field_3345343' => $inner->desc
];
//add data from inner_fields inside the new db entry
}
}
Почему данные из первой итерации $inner также сохраняются в данных второй итерации?
Комментарии:
1. Не уверен, что с предоставленным кодом, но, возможно, после
foreach($results as $result) {
этого$inner_fields = [];
. Вам нужно показать, что на самом деле представляет собой //добавление данных из внутренних полей внутри новой записи БД .2. Показать образец ввода и вывода данных… было бы полезно! — как в вашем $results json или что-то в этом роде… и ваш результат.
3. @AbraCadaver на самом деле это решение! Я добавил инициализацию массива внутри внешнего цикла, и теперь все работает правильно. Большое вам спасибо!
4. @AbraCadaver, Может быть, вы можете опубликовать это в качестве ответа, чтобы я мог отметить его как правильный. Еще раз спасибо!
Ответ №1:
Трудно сказать без предоставленного кода, так как неизвестно, что вы используете в //добавить данные из внутренних полей внутри новой записи БД. Однако, если вы используете массив там, вам нужно сбросить/очистить его:
foreach($results as $result) {
$inner_fields = [];
foreach($result->inner as $inner) {
$inner_fields[] = ['field_2312312' => $inner->name,
'field_3345343' => $inner->desc
];
//add data from inner_fields inside the new db entry
}
}
Комментарии:
1. Как сказано в комментариях, это то решение, которое мне было нужно. Я не предоставил точный код, потому что он очень специфичен для системы управления контентом, которую я использую (добавление записей в БД), но вкратце: у меня есть несколько полей в каждой записи БД, созданной внешним циклом, которые заполняются внутренним циклом. Я знал, что это проблема с циклами, поэтому я сократил приведенный выше код до этого. Большое вам спасибо!