2012-11-20 8 views
2

다음과 같은 문제에 대한 논리가 필요하지만 주위에 머리를 얻을 수 없습니다. 기본적으로 나는 다음과 같은 배열과 같은 일부 데이터는 이제배열로 계층 적 데이터

array(
    array('name' => 'Test1', 
      'hierarchy'=> '1'), 
    array('name' => 'Test2', 
      'hierarchy'=> '1.1'), 
    array('name' => 'Test3', 
      'hierarchy'=> '1.2'), 
    array('name' => 'Test4', 
      'hierarchy'=> '1.2.1') 
) 

내가

$array[1] = 'Test1'; 
$array[1][2][1] = 'Test4'; 

는 동적 변수 이름 지정 및 동적 다차원 배열 만들기를 시도하는 방식으로 출력 배열을하고 싶습니다,하지만 둘 것 해달라고 일하다.

+2

"동적 변수 이름을 지정하고 동적으로 다차원 배열을 만들려고했지만 둘 다 작동하지 않습니다." - 코드를 보여주십시오 ... – Aerik

답변

4

그건 불가능합니다.

$array[1] = 'Test1';$array[1]은 문자열이어야하지만 $array[1][2][1] = 'Test4';의 경우 배열이어야합니다.

이 같은 것을 할 수있는 :

$array[1]['text'] = 'Test1'; 
$array[1][2][1]['text'] = 'Test4'; 

여기에 대한 코드입니다 : 당신이 절대적으로 배열이 필요하지 않은 경우

$result = array(); 

foreach ($input as $entry) 
{ 
    $path_components = explode('.', $entry['hierarchy']); 

    $pointer =& $result; 
    foreach ($path_components as $path_component) 
     $pointer =& $pointer[$path_component]; 

    $pointer['text'] = $entry['name']; 

    unset($pointer); 
} 
+0

대단히 고맙습니다, 그게 문제를 해결했습니다! –

0

, 당신은 클래스를 생성하고 ArrayClass을 확장하거나 경우에 수 배열 액세스 만 필요하면 ArrayAccess을 구현할 수도 있습니다. 거기에서 데이터를 파싱하고 애플리케이션에 필요한 값을 반환 할 수 있습니다.

+0

유효한 아이디어이지만 내부에 일종의 정렬 된 맵이 필요하므로 매번 적절한 값을 검색 할 필요가 없습니다. 글쎄, PHP의 배열은 정렬 된 해시 맵이므로 중복 될 수 있습니다. – cypher