2013-07-23 4 views
0

다음 배열을 가지고 있는데, 자식 페이지 (이 경우 35)의 ID 만 있습니다. 나는 부모님을 받기를 원합니다. 그래서 더 많은 아이가있을 때 모든 아이들을 돌아볼 수 있습니다. (저는이 경우 34 번을 찾고 있습니다).PHP 배열에서 부모 찾기

[34] => Array 
    (
     [id] => 34 
     [label] => Over Ons 
     [type] => page 
     [url] => 8 
     [children] => Array 
      (
       [0] => Array 
        (
         [id] => 35 
         [label] => Algemeen 
         [type] => page 
         [url] => 9 
        ) 

      ) 

    ) 

누구에게도 좋은 해결책이 있습니까?

미리 감사드립니다.

+0

시도해 보셨나요? 꽤 기본적인 (반복적 인) 루프 (함수)를 찾고있는 것처럼 보입니다. –

+4

배열을 생성한다면, 간단히 ** 참조 **를 부모에 추가하십시오 :'$ parent = array(); $ 자식 = 배열 ​​(); $ child [ "parent"] = & $ parent; $ parent [] = $ child' - 그러면 각 어린이에게서 "위쪽으로"갈 수 있습니다. 그리고 전체 배열을 검색하여 부모를 결정할 필요가 없습니다. 최상단의 부모를'null' ofc로 설정하십시오. – dognose

+1

한 번 확인하십시오. http://stackoverflow.com/questions/17806116/how-to-search-by-value-and-get-key-in-multidimensional-arrays/17806172#17806172 – nickle

답변

0

시도 :

foreach ($arr as $key => $value) { 
    foreach ($value["children"] as $child) { 
     if ($child["id"] == $you_look_for) return $key; // or $value["id"] ? 
    } 
} 

이 - 그러나 - 유일한 ID $you_look_for와 아이를 포함하는 배열의 첫 번째 ID를 반환합니다.

0

시도해보십시오 :

$input = array(/* your data */); 
$parentId = 0; 
$childId = 35; 

foreach ($input as $id => $parent) { 
    foreach ($parent['children'] as $child) { 
    if ($child['id'] == $childId) { 
     $parentId = $id; 
     break; 
    } 
    } 
    if ($parentId) { 
    break; 
    } 
} 

아니면 기능 : 당신은 배열 (당신이 당신의 자신에 그것을 만드는 가정)을 빌드 할 때, 부모에 대한 참조를 추가

function searchParent($input, $childId) { 
    foreach ($input as $id => $parent) { 
    foreach ($parent['children'] as $child) { 
     if ($child['id'] == $childId) { 
     return $id; 
     } 
    } 
    } 
} 

$parentId = searchParent($input, $childId); 
0

:

<?php 

$parent = array("id" => 1, "parent" => null); 
$child = array("id" => 2, "parent" => &$parent); //store reference 
$child2 = array("id" => 3, "parent" => &$parent); //store reference 
$parent["childs"][] = $child; 
$parent["childs"][] = $child2; 

foreach ($parent["childs"] AS $child){ 
    echo $child["id"]." has parent ".$child["parent"]["id"]. "<br />"; 
} 

//2 has parent 1 
//3 has parent 1 
?> 

이렇게하면 childs 및을 사용하여 "매우 매끄러운"배열을 걸을 수 있습니다.항목. (기본적으로 나무입니다.)

+0

이 배열을 만들지 않습니다. 그것은 내가 수정하려고하는 Magento 확장에 의해 만들어졌습니다. –