Рекурсивная функция PHP
Цель: взять данные о всех товарах из складской системы. Написал рекурсивную функцию
function get_all_products($url, $fields, $assoc_total = array())
{
$json = do_curl_request($url, $fields);
$assoc = json_decode($json, true);
$assoc_total = array_merge($assoc_total, $assoc['rows']);
// echo '<br><br><br>';
// var_dump($assoc_total);
$next_href = $assoc['meta']['nextHref'];
if ($next_href) {
get_all_products($next_href, $fields, $assoc_total);
}
return $assoc_total;
}
Делаю вызов:
$url = 'https://online.moysklad.ru/api/remap/1.1/entity/product/?offset=1834&limit=1';
$fields = array();
$total = get_all_products($url, $fields);
echo '<br><br><br>';
echo '<br><br><br>';
var_dump($total);
Но в $total почему-то возвращается лишь первая итерация, при том, что $next_href истинно. Дебажил $assoc_total внутри самой функции (строки 6,7), последовательно выводит каждую итерацию.
Ответы (1 шт):
Автор решения: Андрей Кузнецов
→ Ссылка
По наводке u_mulder понял, что в функции не хватало всего лишь маленького штриха.
function get_all_products($url, $fields, $assoc_total = array())
{
$json = do_curl_request($url, $fields);
$assoc = json_decode($json, true);
$assoc_total = array_merge($assoc_total, $assoc['rows']);
// echo '<br><br><br>';
// var_dump($assoc_total);
$next_href = $assoc['meta']['nextHref'];
if ($next_href) {
$assoc_total = get_all_products($next_href, $fields, $assoc_total);
}
return $assoc_total;
}
Теперь результат рекурсии возвращается в переменную, и далее суммируется.