2016-07-14 4 views
0

나는 이와 같은 배열을 가지고 있습니다.뒤집기 다차원 배열

Array (
[0]=> array("a","b") 
[1]=> array("c","d") 
) 

그리고 난 더 나은 방법으로 내가이 작업을 수행 할 수있는 방법

Array (
[a]=> "0", 
[b]=>"0", 
[C]=>"1", 
[d]=>"1" 
) 

로 변환하려면?

+0

더 나은 방법은? 당신이 시도한 것을 보여주십시오. 또한 배열을 생성 할 때이 작업을 수행 할 수 없습니까? - 그리고 다차원 배열을 평면 배열로 바꿔야겠습니까? – Epodax

+0

중첩 된 배열의 각 값이 키가되며 값으로 초기 상위 키가 있어야합니다. 맞습니까? – RomanPerekhrest

+0

더 나은 방법은 빠른 방법을 의미합니다. 나중에 플랫 배열이어야하지만 플립, 이전 배열 키를 새 배열 값 및 이전 배열 값을 새 배열 키가 있어야합니다 의미합니다. –

답변

1

가장 간단한 방법은 중첩 루프를 사용하는 것입니다.

foreach($array as $k => $arr) { 
    foreach($arr as $v) { 
     $result[$v] = $k; 
    } 
} 

출력 :

Array 
(
[a] => 0 
[b] => 0 
[c] => 1 
[d] => 1 
) 
+0

그러나 배열이 클 때 많이 걸립니다. 이 결과를 얻기 위해 사용할 수있는 배열 함수가 있습니까? –

0

당신은 간단하게 사용할 수 있습니다 array_fill_keys, 여기 array_merge

<?php 
$test = [0=> array("a","b"),1=> array("c","d")]; 
$retest = array(); 
foreach($test as $key=>&$value){ 
    $value = array_fill_keys($value, $key); 
    $retest = array_merge($retest,$value); 
} 
print_r($retest); 
?> 

확인 : https://eval.in/604948

출력은 다음과 같습니다

Array 
(
    [a] => 0 
    [b] => 0 
    [c] => 1 
    [d] => 1 
) 
0
array_values, array_fill_keysarray_merge 기능을 사용하여

짧은 솔루션 :

$arr = [ 
    ['a','b'], 
    ['c','d'], 
    ['e','f'], 
]; 

$flipped = []; 
foreach ($arr as $k => $v) { 
    $flipped = array_merge($flipped, array_fill_keys(array_values($v), $k)); 
} 

print_r($flipped); 

출력 :보다

Array 
(
    [a] => 0 
    [b] => 0 
    [c] => 1 
    [d] => 1 
    [e] => 2 
    [f] => 2 
) 
+0

및이 형식으로 두 배열을 얻는 방법. –

+0

$ arr = [ [ 'a', 'b'], [ 'c', 'd'], [ 'e', ​​'f'], ]; –

+0

@SunilPrajapati, 확장 배열을 제시했습니다. 배열은'[[ 'a', 'b'], [ 'c', 'd']]'입니다. 그것은 잘 작동합니다. 이슈가 뭐야? – RomanPerekhrest