2010-11-19 2 views
0

배열을 가져 가고 싶습니다 :

array("one", "two", "three"); 

같은 배열 배열로 만들기 :

$someArray["one"]["two"]["three"]; 

배열 배열 ($someArray) 일부에 의해 만들어야합니다. 초기 배열로 루프의 일종이 explode()에 의해 만들어 지므로 $someArray이 얼마나 깊은 지 모르겠습니다.

시간이 지켜봐 주셔서 감사합니다.

나는 그 순간에 나 자신을 읽고있다, array_map()이 일할 것인가?

답변

1

을한다면 그 일을한다고 생각합니다. 해결책은 간단합니다.

트릭을 수행하려면 배열을 뒤집은 다음 줄이기를 적용하십시오.

$a = array('a','b','c'); 
$x = array_reduce(array_reverse($a), function ($r, $c) { 
     return array($c=>$r); 
    },array()); 

편집 확장 및 버전 설명 : 우리는 함수가 자동으로 배열에 깊이 갈하지만 우리가하지에이없는 PHP에서

합니다. 아래쪽부터 시작하면 간단한 지정으로 이전 배열 인 에 배열을 묶을 수 있습니다.

$a = array('a','b','c'); 
$result=array(); // initially the accumulator is empty 
$result = array_reduce(
    array_reverse($a), 
    function ($partialResult, $currentElement) { 
     /* enclose the partially computed result into a key of a new array */ 
     $partialResult = array($currentElement=>$partialResult); 
     return $partialResult; 
    }, 
    $result 
); 

나는 더 짧은 형식을 선호합니다. 나는 그것이 기능적인 관용구이고 중간 경험 많은 개발자에게 (더 많은 기능적 배경을 가지고) 더 이상의 설명을 필요로하지 않는다고 생각한다. 두 번째 것은 많은 잡음을 추가합니다. 그러나 배우는 것은 적합하지만 소스 코드 을 생산 코드 ()로 가져 오는 것은 분명히 return 문과 함께 작동하는 것입니다.

+0

이봐 친구 당신은 어떤 일 때문에 짧은 손에 그것을 다시 수 있고 $ R, $ C를해야 그들이 $ K에 의해, $ V를 무엇으로 ? 당신은 처음에 혼란스러워했고 나는 그 고급이 아닌 사용자를 위해 13 년 동안 PHP를 사용 해왔다. – Barkermn01

+0

@ Barkermn01 알다시피, $ r은 결과를 나타내고 $ c는 현재를 나타낸다. array_reduce 함수 params의 경우이 이름을 사용합니다. 나는 그들의 이름을 조금씩 확장 할 것이고 (또한 설명을 추가하려고한다) – Eineki

4

이 작업을 수행 할 수 있습니다 존재하는 경우 최종 $ref에서

$path = array("one", "two", "three"); 
$ref = &$arr; 
foreach ($path as $key) { 
    if (!isset($ref[$key])) break; 
    $ref = &$ref[$key]; 
} 

$arr['one']['two']['three']에 대한 참조입니다. break$ref[$key] = array()으로 대체하면 대신 해당 구조를 사용하여 배열을 작성합니다.

+0

롤 같은 일 광산은 조금 짧은 하하 – Barkermn01

0

나는 이것이 왜 필요한지 잘 모르겠습니다.

그러나 그러나 기초 무엇을 당신이

$numbers = array("one", "two", "three"); 

$array = array(); 
$pointer = &$array; 

$last_val = NULL; 

foreach($numbers as $key => $val){ 
    if(!empty($pointer[$last_val])){ 
     $pointer = &$pointer[$last_val]; 
     $pointer = new array($val); 
     $last_val = $val; 
    }else{ 
     $pointer = new array($val); 
     $last_val = $val; 
    } 
} 

것과 같다 원하는이해야 마우스 오른쪽 당신이 $ 배열에 원하는;

이 안된하지만 난 그냥 그 일을 무엇을 말하지 않고 당신이 array_reduce를 사용해야 살펴

0

$ arrNew를 인쇄하면 다음과 같이 인쇄됩니다.

Array 
(
    [one] => Array 
     (
      [two] => Array 
      (
       [three] => Array 
        (
        ) 

      ) 

    ) 

)