带额外步骤的递归php函数

带额外步骤的递归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函数,它实际上使用了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"}]}}';
} 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);
?>