2012-07-27 1 views
0

으로 PHP 다차원 배열을 배열 (0, 1, 2) 각각의 두번째 인덱스의 값과 마지막 내측 인덱스의 값을 얻을 :마지막 내부 색인함으로써 이러한 어레이 정렬 방법 이너 인덱스

Array 
(
    [text] => Array 
     (
      [grid] => Array 
       (
        [0] => 3 
        [1] => 4 
        [2] => 5 
       ) 

      [image] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

      [align] => Array 
       (
        [0] => left 
        [1] => right 
        [2] => left 
       ) 

      [title] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

      [content] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

     ) 

) 

그리고 결과는 아래와 같습니다 :

Array 
(
    [text] => Array 
     (
      [0] => Array 
       (
        [grid] => 3 
        [image] => 
        [align] => left 
        [title] => 
        [content] => 
       ) 

      [1] => Array 
       (
        [grid] => 4 
        [image] => 
        [align] => right 
        [title] => 
        [content] => 
       ) 

      [2] => Array 
       (
        [grid] => 5 
        [image] => 
        [align] => left 
        [title] => 
        [content] => 
       ) 

     ) 

) 
+3

을 할 것입니다 당신은 하나의 라이너 솔루션을 찾고? 위의 내용이'foreach'를 사용하여 사소하다는 것이 확실합니다. –

+0

솔루션에서 인덱스 [0]은 어디에 있습니까? 1과 2 만 스캔했습니다. 이런 종류의 문제는 새로운 결과 배열을 만들고 foreach ($ someArr as $ key => $ value)를 사용하여 쉽게 해결할 수 있습니다 –

+0

@SiGanteng 더 나은 방법을 찾고 있습니다 각 1 번째의 배열을 아이 인덱스로 지정합니다. 위의 예제는 0, 1 및 2 색인을 사용합니다. 마지막 하위 색인은 0에서 임의의 숫자로 시작합니다. – zourbuth

답변

2

이 작업

function restructure($arr){ 
    $newArr = array(); 
    foreach($arr as $k => $v){ 
     foreach($v as $k1 => $v1){ 
      foreach($v1 as $k2 => $v2){ 
       $newArr[$k][$k2][$k1] = $v2; 
      } 
     } 
    } 
    return $newArr; 
} 
0

이것은 작동합니다.

function formatit($arr) { 

    $new = array(); 

    foreach($arr as $k=>$v) { 
    foreach($v as $k1=>$v1) { 
    $new[$k1][$k] = $v1; 
    } 
    } 
    return $new; 
} 

테스트 됨. SiGanteng가 제안한 것처럼 내가 for/foreach 루프보다 다른 방법을 참조 해달라고,

$arr['text'] = formatit($arr['text']); 

http://ideone.com/rPzuR

+2

어쩌면 먼저 테스트해야합니다 ..? –

+0

방금 ​​테스트되었습니다 .. 좋은, 친구. 내 표본. – FatalError

+2

@FatalError : false입니다. http://ideone.com/hoJXu –

1

로 전화 :

function buildArray($source, $key = false) 
{ 
    // Build the new array 
    $new_array = array(); 
    // Define groups 
    $groups = $key === false ? array_keys($source) : array($key); 

    foreach($groups AS $group) 
    { 
     // Get the keys 
     $keys = array_keys($array[$group]); 
     // Count the values 
     $num_entries = count($array[$group][$keys[0]]); 

     for($i = 0; $i < $num_entries; $i++) 
     { 
      foreach($keys AS $key) 
      { 
       $new_array[$group][$i][$key] = $array[$group][$key][$i]; 
      } 
     } 
    } 
    return $new_array; 
} 

이 당신이 구축하는 데 필요한 키를 정의 할 수 있습니다; 지정하지 않으면이 함수는 모든 키에 대해 배열을 작성합니다.

+0

출력이 OP와 다를 때 출력 샘플을주의 깊게 읽으십시오 –

+1

@SiGanteng youre right, 나는 처음 '텍스트'인덱스를 알지 못했습니다. 내 나쁜 – Strae

+0

The text "는 첫 번째 단계 색인입니다. 어떻게 "버튼", "비디오"등과 같은 다른 프리 스테이지 배열 인덱스가 있다면? – zourbuth