이 경우 필요한 논리는 간단 할 수도 있고 그렇지 않을 수도 있지만 알아낼 수는 없습니다. 그래서 도움을 청합니다.PHP 배열 반복 논리 관련 문제
Array=>
[0]=>
['name'] = item1
['id'] = 1
['parent_id'] = 0
[1]=>
['name'] = item2
['id'] = 2
['parent_id'] = 1
[2]=>
['name'] = item3
['id'] = 3
['parent_id'] = 5
지금, 나는 각이 목록의 모든 항목에 대한 경로를 확인해야합니다 :
쿼리 후, 나는 조금 다음과 같습니다 배열을 얻을. 경로는 항목 1에 대해 /item1
이고 항목 2에 대해서는 /item1/item2
과 같습니다.
참고 : 항목이 반드시 순서에 있어야하는 것은 아닙니다. 상위 항목은 하위 항목 뒤에 올 수 있습니다 ...
그래서 기본적으로 항목이 생기면 항목 이름 앞에 슬래시를 씁니다. 그런 다음 parent_id
을보고 parent_id
의 이름 앞에 슬래시를 씁니다.
그런 다음 부모의 parent_id
을보고 그 이름 앞에 슬래시를 씁니다. parent_id
이 0이 될 때까지이 작업을 계속 수행합니다. 어느 시점에서 배열에 값을 할당하므로 paths['item2'] = "/item1/item2"
과 같은 것으로 다음 ID로 이동하여 반복됩니다!
여러분 모두의 도움에 감사드립니다. 좋은 하루 되세요!
편집 : item3의 id가 수정되었으므로 모든 항목의 ID가 다릅니다. 나는 질문을 개선하기 위해 질문을 받았다 : 최종 출력 배열은 다음과 같이 조금 보일 것입니다 :
이Array=>
["item1"]="/item1"
["item2"]="/item1/item2"
["item3"]="/item5/item3"
최종 출력은 옵션으로 각 항목과 HTML 선택 폼 것을, 나는 그것의가 필요 경로는 어떻게 든 숨겨진 필드 또는 Ajax 등을 통해 연결됩니다.
편집 : 문제가 해결되었습니다. 나는 누군가 다른 사람이이 문제를 우연히 발견 할 경우를 대비해서 여기에 해결책을 쓰려고했다. 참고 : 여전히 작동 방식은 확실하지 않지만 작동합니다! 비효율적 일 수도 있습니다. 모르겠습니다.
function getCollPath($proj_list, $length){
$total_path = "";
$paths = array();
for ($j = 0; $j < $length + 1; $j++){
if (isset($proj_list[$j])){
$id = $j;
$name = $proj_list[$j]['name'];
$total_path = getItemPath($proj_list, $id, NULL);
$paths[$name] = $total_path;
}
}
return $paths;
}
function getItemPath($proj_list, $current_id, $path){
$current_parent_id = $proj_list[$current_id]['parent_id'];
$current_name = $proj_list[$current_id]['name'];
$current_path = "/".$current_name;
if ($current_parent_id == 0){
if (isset($path)){
return $current_path.$path;
}
else{
return $current_path;
}
}
else{
if (!isset($path)){
$path = $current_path;
}
return getItemPath($proj_list, $current_parent_id, $path);
}
}
왜 'item2'와 (와) 같은 item3이 같은 id를 공유합니까? – webbiedave
최종 출력은 무엇입니까? – Jon
@webbiedave 그저 오타입니다. 모든 이드는 고유해야합니다. – zermy