从php数组中查找所有不同的路径可能性

从php数组中查找所有不同的路径可能性,php,arrays,decision-tree,Php,Arrays,Decision Tree,我试图从PHP中的决策树中获取所有可能性,我的输入如下所示: array( (int) 61 => array( (int) 257 => '62' ), (int) 62 => array( (int) 258 => '63', (int) 259 => '63', (int) 260 => '64', (int) 261 => null )

我试图从PHP中的决策树中获取所有可能性,我的输入如下所示:

array(
    (int) 61 => array(
        (int) 257 => '62'
    ),
    (int) 62 => array(
        (int) 258 => '63',
        (int) 259 => '63',
        (int) 260 => '64',
        (int) 261 => null
    ),
    (int) 63 => array(
        (int) 262 => '65',
        (int) 263 => '65',
        (int) 264 => '66',
        (int) 265 => '69'
    ),
    (int) 64 => array(
        (int) 266 => '65',
        (int) 267 => '66',
        (int) 268 => '66',
        (int) 269 => null
    ),
...
若命中空值,则路径已完成

第一级关键点是场景id,第二级是选项id作为关键点,下一个场景id作为值

我不知道如何处理这个问题,我尝试了如下递归函数:

function myRecursive($dialogs) {

        foreach($dialogs as $i => $scene_to_go) {
            if(empty($scene_to_go)) {
                $index++;
            } else {
                $result[$index][] = $scene_to_go;
                myRecursive($scenesArray[$scene_to_go]);
            }

        }

}

myRecursive($scenesArray[61]);
但它只适用于第一种可能性,我想我已经接近解决方案了? 问题是结束条件,以及如何避免重复

非常感谢你的帮助

编辑:预期结果数组应如下所示:

[
[61, 62, 63, 65],
[61, 62, 64, 65],
...
]

如果展平
$finalArray
,则在数组键中获得了独特的可能性。



如果将
$finalArray
展平,那么数组键中就有了独特的可能性。

myRecursive($scenesArray[62])的输出是什么;没有特定的输出,我只想在$result数组中推送scene_id,根据我目前的可能性,插入62,这是什么?用户所做的选择?然后为用户定义所有可能的路径和所有节点?或者你需要每一个指向null的id吗?62是用户所经历的场景,我需要在我的结果数组的一行中推送所有的场景id,我不明白你期望的输出是什么,所以给我们一个输入和输出的示例你期望从myRecursive($scenesArray[62])得到的输出是什么;没有特定的输出,我只想在$result数组中推送scene_id,根据我目前的可能性,插入62,这是什么?用户所做的选择?然后为用户定义所有可能的路径和所有节点?或者你需要每个指向null的id吗?62是用户所经历的场景,我需要在我的结果中的一行中推送所有场景的id以获得路径。我不明白你期望的输出是什么,所以请给我们一个输入和输出示例
<?php
   public function getNextScenes($sceneId, &$nextDialogsArray) {
        global $array;
        foreach($array[$sceneId] as $dialogId => $nextSceneId) {
            $nextDialogsArray[$dialogId] = [];

            if (!empty($nextSceneId)) {
                $this->getNextScenes($nextSceneId, $nextDialogsArray[$dialogId]);
            }
        }
    }

    global $array;

    $array = [/**/]; // The input array you mentionned up there

    $finalArray = [];

    $this->getNextScenes(61, $finalArray);

?>