Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php递归函数返回数组结果_Php - Fatal编程技术网

Php递归函数返回数组结果

Php递归函数返回数组结果,php,Php,我在理解PHP中的递归函数时遇到问题 我想检索所有更新旧服务的服务,从旧ID(服务)开始。返回数组结果 例如我的桌子服务 ID | Name | DateExpire |IDOldServiceRenewed| ----------------------------------------------- 1 | Serv1 | 2018-10-10 | | ---------------------------------------------

我在理解PHP中的递归函数时遇到问题

我想检索所有更新旧服务的服务,从旧ID(服务)开始。返回数组结果

例如我的桌子服务

ID  | Name  | DateExpire  |IDOldServiceRenewed|
-----------------------------------------------
1   | Serv1 | 2018-10-10  |                   |
-----------------------------------------------

2   | Serv2 | 2018-10-11  |                   |
-----------------------------------------------

3   | Serv3 | 2018-10-12  |         2         |
-----------------------------------------------

4   | Serv4 | 2018-10-13  |         3         |
-----------------------------------------------

5   | Serv5 | 2018-10-14  |         1         |
-----------------------------------------------

6   | Serv6 | 2018-10-15  |                   |
-----------------------------------------------

7   | Serv7 | 2019-02-10  |        4          |
-----------------------------------------------

8   | Serv8 | 2019-05-15  |         5         |
-----------------------------------------------
因此,在我的示例中,如果我想知道
ID=2
的旧服务的所有新服务(以便从旧服务更新到新服务),我希望返回如下数组:

$result = array(
  "0" => array(
    "ID" => 3,
    "Expired" => 2018-10-12
  ),
  "1" => array(
    "ID" => 4,
    "Expired" => 2018-10-13
  ),
  "2" => array(
    "ID" => 7,
    "Expired" => 2019-02-10
  )
)
array(
    1 => array( "id" => ... , "expired" => ...),
    2 => array( 1 => array( "id" => ... , "expired" => ...) )
)
对于
ID=1

$result = array(
  "0" => array(
    "ID" => 5,
    "Expired" => 2018-10-14
  ),
  "1" => array(
    "ID" => 8,
    "Expired" => 2019-05-15
  )
)
我试着从这样的函数开始,但在var_dump中总是得到NULL:

function get_recursive_id_services($idOldService, &$result) {

    $sql = "SELECT SERVICES.* FROM SERVICES WHERE IDOldServiceRenewed = ?";

    $s = $db->prepare($sql);
    $s->execute(array($idOldService));
    $ris = $s->fetch(PDO::FETCH_ASSOC);

    if ( $ris ) {

        $id= $ris['ID'];

        $result[$idOldService] = $id;

        $result[] = get_recursive_id_services($id, $result);

    } else {

        return $result;

    }

}

// TEST

$temp = array();

$result = get_recursive_id_services(2, $temp);

var_dump($result);

您的代码有一个问题。函数将
$result
参数作为参考。这意味着这一行:

$result[] = get_recursive_id_services($id, $result);
将给出如下内容:

$result = array(
  "0" => array(
    "ID" => 3,
    "Expired" => 2018-10-12
  ),
  "1" => array(
    "ID" => 4,
    "Expired" => 2018-10-13
  ),
  "2" => array(
    "ID" => 7,
    "Expired" => 2019-02-10
  )
)
array(
    1 => array( "id" => ... , "expired" => ...),
    2 => array( 1 => array( "id" => ... , "expired" => ...) )
)
你想要的是这个:

return get_recursive_id_services($id, $result);

多亏了@Karol Samborski的建议,我终于成功了

function get_recursive_id_services($id, &$result) {

  $sql = "SELECT SERVICES.* FROM SERVICES WHERE IDOldServiceRenewed = ?";
  $s = $db->prepare($sql);
  $s->execute(array($id));
  $ris = $s->fetch(PDO::FETCH_ASSOC);
  if ( $ris ) {
    $idNewService = $ris['ID'];
    $result[] = array("ID" => $idNewService, "DateExpire" => $ris['DateExpire']);
    return get_recursive_id_services($idNewService, $result);
  } else {
    return $result;
  }

}

请理解递归。谢谢。如果
$ris
的计算结果有误,为什么不返回任何内容呢?您好,我已经找到了这篇文章,但所有示例都会打印结果。我需要更新一个数组$result以在函数外部使用。您希望结果数组包含子数组,但您在此处将标量值推送到它上,
$result[$idOldService]=$id-我认为这没有意义。我认为,通过引用传递
和$result
在这里也不必要。函数不需要在自己的作用域之外修改数组,因为它可以在每个递归步骤结束时返回数组的当前状态。