2014-10-14 3 views
1

다음과 같은 효과를내는 PHP 함수가 내장되어 있습니까? ,PHP 다차원 배열의 배열/방향 변경

array(
    [0] => array(
     ['name'] => 'Pat', 
     ['score'] => '100', 
     ['color'] => 'blue' 
    ), 
    [1] => array(
     ['name'] => 'Sam', 
     ['score'] => '95', 
     ['color'] => 'red' 
    ), 
    [2] => array(
     ['name'] => 'Chris', 
     ['score'] => '109', 
     ['color'] => 'green' 
    ) 
) 

그렇지 않으면 : 나는 문제를 설명하는 방법을 잘 모르지만 어디 선가 전에 솔루션 보았다 같은 느낌이에

array(
    ['name'] => array(
     [0] => 'Pat', 
     [1] => 'Sam', 
     [2] => 'Chris' 
    ), 
    ['score'] => array (
     [0] => '100', 
     [1] => '95', 
     [2] => '109' 
    ), 

    ['color'] => array (
     [0] => 'blue', 
     [1] => 'red', 
     [3] => 'green' 
    ) 
) 

:

방법이 변경을 재귀 함수가이 문제를 해결할 수있는 적절한 방법일까요?

+1

이 [이조 (http://stackoverflow.com/questions/797251/transposing-multidimensional-arrays-in-php) – pguardiario

답변

0

내장 된 함수에 대해서는 잘 모릅니다 만, 몇 개의 루프가 트릭을해야합니다.

$ar = array(
    'name' => array(
     0 => 'Pat', 
     1 => 'Sam', 
     2 => 'Chris' 
    ), 
    'score' => array (
     0 => '100', 
     1 => '95', 
     2 => '109' 
    ), 

    'color' => array (
     0 => 'blue', 
     1 => 'red', 
     3 => 'green' 
    ), 
); 
$new_ar = array(); 
foreach($ar as $key => $val) { 
    foreach($val as $key2 => $val2) { 
     $new_ar[$key2][$key] = $val2; 
    } 
} 
print_r($new_ar); 
+0

SRY라고 : 나는 또한 당신의 사건에 대한 언급 질문에서 답변을 채택 - 작은 실수를 했어, 지금 고쳐 졌어. – smokiespartakus

0
$arr = array(
    'name'=> array('Pat', 'Sam', 'Chris'), 
    'score'=> array ('100', '95','109'), 
    'color'=> array ('blue', 'red', 'green') 
); 
array_unshift($arr, null); 
echo "<pre>"; print_r(call_user_func_array('array_map', $arr)); 
0

은 도전적으로 당신에게 도움이 될 것입니다이 시도

<?php 

$old = array(
     'name' => array('Pat', 'Sam','Chris'), 
     'score' => array('100', '95','109'), 
     'color' => array('blue', 'red','green'), 
); 

foreach($old as $key => $value){ 
    $i = 0; 
    foreach($value as $sub_key => $sub_value){ 
     $new[$i][$key] = $sub_value; 
     $i++; 
    } 
} 
print_r($new); 

?> 

출력 :

Array 
(
    [0] => Array 
     (
      [name] => Pat 
      [score] => 100 
      [color] => blue 
     ) 

    [1] => Array 
     (
      [name] => Sam 
      [score] => 95 
      [color] => red 
     ) 

    [2] => Array 
     (
      [name] => Chris 
      [score] => 109 
      [color] => green 
     ) 

) 
0

첫 번째 배열은 2 차원 배열 즉 매트릭스, 계산에서 관점에서, 원하는 결과는 전치 된 행렬이지만 (키를 유지하면서) 따라서 here을 볼 수 있습니다 PHP에서 행렬을 이항 (transposing)하는 것과 관련된 몇 가지 해답이 있습니다.

$arr = array(
    'name' => array('Pat', 'Sam', 'Chris'), 
    'score' => array ('100', '95', '109'), 
    'color' => array ('blue', 'red', 'green') 
); 

$arr_keys = array_keys($arr); 

array_unshift($arr, function(){ 
    return array_combine($GLOBALS['arr_keys'], func_get_args()); 
}); 

$result = call_user_func_array('array_map', $arr); 

print_r($result); 
관련 문제