2011-11-28 4 views
0

다차원 배열을 만드는 코드가 있지만 결과가 원하는 배열이 아닌 것처럼 보입니다. 이 배열을 평평하게하고 싶습니다. 이 배열 결과를 어떻게 변경할 수 있습니까?다차원 배열 구조 변경

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [2011-11-18 00:00:00] => C 
       ) 

      [1] => Array 
       (
        [2011-11-18 00:00:00] => I 
       ) 

      [2] => Array 
       (
        [2011-11-18 00:00:00] => S 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [2011-11-22 00:00:00] => C 
       ) 

      [1] => Array 
       (
        [2011-11-22 00:00:00] => S 
       ) 

     ) 

) 

"배열 배열"이 아닌 것은 무엇입니까? 당신은 그것이 "배열의 배열"되지 않도록 배열을 구축 할 수있는 더 좋은 방법을 제안 할 수있는 경우

$qrybilled = $this->db->query("SELECT tbltc.BILLED FROM tbltc WHERE tbltc.PN = $pn AND tbltc.Y = $taxyear AND tbltc.SCENARIO = $scenario GROUP BY BILLED"); 
$x = 0; $arr_billed = array(); 

foreach ($qrybilled->result() as $row) { 
$qry = $this->db->query("SELECT tbltc.BILLED, tbltc.TC, tbltc.CAT FROM tbltc WHERE tbltc.PN = $pn AND tbltc.Y = $taxyear AND tbltc.SCENARIO = $scenario AND tbltc.BILLED = '".$row->BILLED."' GROUP BY TC"); 

    $tmp = array(); 
    foreach ($qry->result() as $row) {  
     $tmp[] = array($row->BILLED => $row->TC); 
    } 
    $arr_billed[] = $tmp; 

} 
$data['billed'] = $arr_billed; 

하는, 즉 좋은 것 : 여기 배열의 배열을 생성하는 코드입니다. 당신의 도움을 주셔서 감사합니다.

  • 편집 -

NickB의 대답은 나를 위해 완벽하게 작동하고 내가 찾던 무엇을 다음과 같은 출력, 제작 :

Array 
(
    [2011-11-18 00:00:00] => Array 
     (
      [0] => C 
      [1] => I 
      [2] => S 
     ) 

    [2011-11-22 00:00:00] => Array 
     (
      [0] => C 
      [1] => S 
     ) 

) 
+0

당신은 같은 인덱스를 여러 번 할 수 없습니다. –

+2

나는 @BookOfZeus가 ** 동일한 인덱스를 여러 번 가질 수 없다는 것을 의미한다고 믿는다. – nickb

+0

@nickb 네, 맞습니다, 제 쪽에서 스펠링이 잘못되었습니다 –

답변

3

을 당신은 수있는 모든을 통해 루프 배열에있는 항목을 사용하여 새 배열을 만듭니다.

$result = array(); 

foreach($array as $inner_array) 
{ 
    foreach($inner_array as $entry) 
    { 
     foreach($entry as $key => $value) 
     { 
      $result[ $key ][] = $value; 
     } 
    } 
} 

출력 : 더 같은 배열 한 것보다 동일한 키를 사용하지만

array(2) { 
    ["2011-11-18 00:00:00"]=> 
    array(3) { 
    [0]=> 
    string(1) "C" 
    [1]=> 
    string(1) "I" 
    [2]=> 
    string(1) "S" 
    } 
    ["2011-11-22 00:00:00"]=> 
    array(2) { 
    [0]=> 
    string(1) "C" 
    [1]=> 
    string(1) "S" 
    } 
} 
1

, 당신은 간단한 (하지만 여전히 중첩 된) 구조 (쌍의 목록을 반환 할 수 - 몇몇 언어가 그것을 부르는 것처럼).

데이터가 $data라고 가정하면

$compactData = array(); 
array_walk_recursive($data, function($value, $key) use (&$compactData) { 
    $compactData[] = array($key, $value); 
}); 

print_r($compactData); 

인쇄 :

Array 
(
    [0] => Array 
     (
      [0] => 2011-11-18 00:00:00 
      [1] => C 
     ) 

    [1] => Array 
     (
      [0] => 2011-11-18 00:00:00 
      [1] => I 
     ) 

    [2] => Array 
     (
      [0] => 2011-11-18 00:00:00 
      [1] => S 
     ) 

    [3] => Array 
     (
      [0] => 2011-11-22 00:00:00 
      [1] => C 
     ) 

    [4] => Array 
     (
      [0] => 2011-11-22 00:00:00 
      [1] => S 
     ) 

) 
+0

감사합니다. Adam. 이 방법으로 내 데이터를 고려하지 않았지만 어디에서 왔는지 이해합니다. 이것이 2D 배열이라고 부릅니까? – DanielAttard