функция рекурсии для данных дерева для получения пути - PullRequest
0 голосов
/ 14 мая 2019

Я хочу написать функцию, которая получит мне путь к верхнему элементу, но я не могу понять, как он должен работать.

Мои данные в качестве примера:

$data = array(
    3546456 => array(
        5345345,
        12312312,
        56456546,
    ),
    12312312 => array(
        34534534,
        5675675,
        8678678,
    ),
    567978 => array(
        234,
        756756,
        8678678,
    ),
);

//I have function to return parent.
$parents = getParents(8678678); // eg. $object_id = 8678678 - return [12312312, 567978] , $object_id = 12312312 - return [3546456]

// and my recursion function I tried.
function getObjectPath($object_id) {
    if ($object_id == null) {
        return [];
    }

    $parents = getObjectParents($object_id); 

    foreach ($parents as $parent) {
        return array($object_id => getObjectPath($parent->nid));
    }
}

Это нене работает так, как мне нужно, при возврате в getObjectPath (8678678) я хотел бы иметь возвращаемый массив следующим образом:

array(
    3546456 => array(
        12312312 => array(
            8678678
        )
    ),
    567978 => array(
        8678678
    )
);

1 Ответ

0 голосов
/ 14 мая 2019

Я думаю, что вы почти получили его, перед возвратом нужно еще кое-что проверить

$data = array(
    3546456 => array(
        5345345,
        12312312,
        56456546,
    ),
    12312312 => array(
        34534534,
        5675675,
        8678678,
    ),
    567978 => array(
        234,
        756756,
        8678678,
    ),
);
//I have function to return parent.
$parents = getObjectPath(8678678, $data); // eg. $object_id = 8678678 - return [12312312, 567978] , $object_id = 12312312 - return [3546456]
echo "<pre>";
print_r($parents);

// and my recursion function I tried.
function getParents($object_id, $data) {
    $return = [];
    foreach($data as $key => $value) {
        if(in_array($object_id, $value)) {
            $return[] = $key;
        }
    }
    return $return;
}

// and my recursion function I tried.
function getObjectPath($object_id, $data) {
    $return = [];
    $parents = getParents($object_id, $data);
    foreach($parents as $parent) {
        $temp  = getObjectPath($parent, $data);
        if(!empty($temp)) {
            $return[key($temp)][$parent] = $object_id;
        } else {
            $return[$parent] = $object_id;
        }
    }
    return $return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...