从 php 数组中找到所有不同的路径可能性
Find all distinct path possibilities from php array
我正在尝试从 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],
...
]
<?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);
?>
如果你把$finalArray
压平,那么,你就得到了数组键中唯一的可能性。
我正在尝试从 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],
...
]
<?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);
?>
如果你把$finalArray
压平,那么,你就得到了数组键中唯一的可能性。