带额外步骤的递归php函数
我有一个当前的递归php函数,它实际上使用了curl(我刚才简化了这个问题),并返回一个json带额外步骤的递归php函数,php,recursion,Php,Recursion,我有一个当前的递归php函数,它实际上使用了curl(我刚才简化了这个问题),并返回一个json <?php function getData($params = array(), $page = 1) { if ($page == 1) { $xmlString = '{"result":{"current_page":1,"total_pages":3,"products":[{"name":"product1"},{"name":"product2"}]}}'; } els
<?php
function getData($params = array(), $page = 1) {
if ($page == 1) {
$xmlString = '{"result":{"current_page":1,"total_pages":3,"products":[{"name":"product1"},{"name":"product2"}]}}';
} else if ($page == 2) {
$xmlString = '{"result":{"current_page":2,"total_pages":3,"products":[{"name":"product3"},{"name":"product4"}]}}';
} else if ($page == 3) {
$xmlString = '{"result":{"current_page":3,"total_pages":3,"products":[{"name":"product5"}]}}';
}
if ($params['supplier_id'] == 13) {
$products = [];
$xmlArray = json_decode($xmlString, true);
if ($xmlArray['result']['current_page'] < 3) {
$nextPage = (int) $page + 1;
$products = array_merge($xmlArray['result']['products'], getData($params, $nextPage));
return $products;
}
$xmlString = $products;
}
$data['data'] = $xmlString;
$data['discount'] = isset($params['discount)']) ? $params['discount'] : 0;
$data['connection_user'] = isset($params['connection_user']) ? $params['connection_user'] : '';
return $data;
}
$params = '{"id": 1, "supplier_id": 13}';
$params = json_decode($params, true);
$data = getData($params);
echo "<pre>";
var_dump($data);
我想要的回答是:
<?php
function getData($params = array(), $page = 1) {
$data['data'] = getProducts($params, $page);
$data['discount'] = isset($params['discount)']) ? $params['discount'] : 0;
$data['connection_user'] = isset($params['connection_user']) ? $params['connection_user'] : '';
return $data;
}
function getProducts($params = array(), $page = 1){
if ($page == 1) {
$xmlString = '{"result":{"current_page":1,"total_pages":3,"products":[{"name":"product1"},{"name":"product2"}]}}';
} else if ($page == 2) {
$xmlString = '{"result":{"current_page":2,"total_pages":3,"products":[{"name":"product3"},{"name":"product4"}]}}';
} else if ($page == 3) {
$xmlString = '{"result":{"current_page":3,"total_pages":3,"products":[{"name":"product5"}]}}';
}else{
$xmlString = '{"result":{"products":[]}}';
}
$xmlArray = json_decode($xmlString, true);
$products = $xmlArray['result']['products'];
if ($params['supplier_id'] == 13) {
if ($page <= 3) {
$nextPage = (int) $page + 1;
$products = array_merge($products, getProducts($params, $nextPage));
}
}
return $products;
}
$params = '{"id": 1, "supplier_id": 13}';
$params = json_decode($params, true);
$data = getData($params);
var_dump($data);
?>
希望这有帮助。
已编辑
您想获得全部5种产品吗?还是只想将响应转换为所需的响应。像这样,array(7){[0]=>string(8)“product1”[1]=>string(8)“product2”…}
我想浏览所有页面,获取所有产品,并将它们全部放入$data['data'],仔细查看您所做的事情后,这不是我所需要的。您只需将输入更改为数组并循环它。我使用curl来获取信息,结果被分页。这就是为什么我做了所有的if-else页面。这就是为什么我需要递归。我只是用递归做了希望这个帮助是的,现在它可以工作了,第一次很抱歉,太激动了。谢谢你的帮助。
array(3) { ["data"]=> array(5) { [0]=> array(1) { ["name"]=> string(8) "product1" } [1]=> array(1) { ["name"]=> string(8) "product2" } [2]=> array(1) { ["name"]=> string(8) "product3" } [3]=> array(1) { ["name"]=> string(8) "product4" } [4]=> array(1) { ["name"]=> string(8) "product5" } } ["discount"]=> int(0) ["connection_user"]=> string(0) "" }
<?php
function getData($params = array(), $page = 1) {
$data['data'] = getProducts($params, $page);
$data['discount'] = isset($params['discount)']) ? $params['discount'] : 0;
$data['connection_user'] = isset($params['connection_user']) ? $params['connection_user'] : '';
return $data;
}
function getProducts($params = array(), $page = 1){
if ($page == 1) {
$xmlString = '{"result":{"current_page":1,"total_pages":3,"products":[{"name":"product1"},{"name":"product2"}]}}';
} else if ($page == 2) {
$xmlString = '{"result":{"current_page":2,"total_pages":3,"products":[{"name":"product3"},{"name":"product4"}]}}';
} else if ($page == 3) {
$xmlString = '{"result":{"current_page":3,"total_pages":3,"products":[{"name":"product5"}]}}';
}else{
$xmlString = '{"result":{"products":[]}}';
}
$xmlArray = json_decode($xmlString, true);
$products = $xmlArray['result']['products'];
if ($params['supplier_id'] == 13) {
if ($page <= 3) {
$nextPage = (int) $page + 1;
$products = array_merge($products, getProducts($params, $nextPage));
}
}
return $products;
}
$params = '{"id": 1, "supplier_id": 13}';
$params = json_decode($params, true);
$data = getData($params);
var_dump($data);
?>