2014-06-22 4 views
1

Я пытаюсь получить jquery.treeview.js, чтобы сброситься в только что созданную папку. Думаю, мне нужен массив «родителей», чтобы задать класс для «открытия».php recursive get родители

Другие предложения работы со мной ;-) (найти это немного слишком много, но не может найти другой способ сделать это

Имея массив как это:.

array(7) { 
     [126]=> 
     array(4) { 
     ["folder_id"]=> 
     string(3) "126" 
     ["folder_name"]=> 
     string(3) "555" 
     ["folder_parent"]=> 
     string(3) "125" 
     } 
     [2]=> 
     array(4) { 
     ["folder_id"]=> 
     string(1) "2" 
     ["folder_name"]=> 
     string(14) "Administration" 
     ["folder_parent"]=> 
     string(1) "1" 
     } 
     [7]=> 
     array(4) { 
     ["folder_id"]=> 
     string(1) "7" 
     ["folder_name"]=> 
     string(5) "Britt" 
     ["folder_parent"]=> 
     string(1) "2" 
     } 
     [4]=> 
     array(4) { 
     ["folder_id"]=> 
     string(1) "4" 
     ["folder_name"]=> 
     string(9) "Documents" 
     ["folder_parent"]=> 
     string(1) "3" 
     } 
     [3]=> 
     array(4) { 
     ["folder_id"]=> 
     string(1) "3" 
     ["folder_name"]=> 
     string(14) "Infrastructure" 
     ["folder_parent"]=> 
     string(1) "1" 
     } 
     [1]=> 
     array(4) { 
     ["folder_id"]=> 
     string(1) "1" 
     ["folder_name"]=> 
     string(4) "root" 
     ["folder_parent"]=> 
     string(1) "0" 
     } 
     [125]=> 
     array(4) { 
     ["folder_id"]=> 
     string(3) "125" 
     ["folder_name"]=> 
     string(13) "test-deleteme" 
     ["folder_parent"]=> 
     string(1) "7" 
     } 
    } 

Я хотел бы получить родители из выбранного folder_id.

получения данных для folder_id = 126 должны возвращать массив с родителями {1,2,7,122}

Кто-нибудь?

+0

Вы имеете в виду {1,2,7,125}? –

+0

Извините, да, ваши права. – osomanden

ответ

5

Ну, вот мое с рекурсивным:

function getParent($folder_id, $data, $parents=array()) { 
    $parent_id = isset($data[$folder_id]) ? $data[$folder_id]['folder_parent'] : 0; 
    if ($parent_id > 0) { 
     array_unshift($parents, $parent_id); 
     return getParent($parent_id, $data, $parents); 
    } 
    return $parents; 
} 

//Usage 
print_r(getParent(126, $your_folders)); 

Похоже, я плагиатом mancuernita's solution Настоящим я извиняться. Это похоже, но я не копирую!

+0

Возможно, мы все думали о подобном решении, когда мы читаем вопрос;) – mancuernita

+0

Спасибо за понимание! –

+0

Работал как шарм. (кроме использования, измененного на getParent) – osomanden

2

Вы могли бы сделать что-то вроде:

function yourFunction(id, array) { 
    sol = array(); 
    while (id) { 
    id = find_parent(id, array); 
    array_push(sol, id); 
    } 

    return sol; 
} 

function find_parent(id, array) { 
    return array[id]["folder_parent"]; 
} 

Я не пробовал код, и, возможно, он нуждается в некоторой работы больше.

Смежные вопросы