Найти все различные пути пути из массива php

Я пытаюсь получить все возможности из дерева решений в 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
),
...

Если задано нулевое значение, путь завершен.

Ключ первого уровня — это идентификатор сцены, второй уровень — идентификатор выбора в качестве ключа и идентификатор следующей сцены в качестве значения.

Я не могу понять, как справиться с этой проблемой, я попробовал рекурсивную функцию, как это:

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],
...
]

1

Решение

<?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то есть у вас есть уникальные возможности в ключах массива.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector