2012-04-27 5 views
2

그 값에 기초 PHP에서 multidimentional 배열 :개편이 같은 멀티 dimentional PHP 배열이

열 "B"는 2 개 가지 값 (X, Y) 및 열이

"V"가 가능한 2를 갖고 값 (t, f)

Array 
(
[0] => Array 
    (
     [a] => 6 
     [b] => x 
     [c] => t 
    ) 

[1] => Array 
    (
     [a] => 4 
     [b] => x 
     [c] => t 
    ) 
[2] => Array 
    (
     [a] => 6 
     [b] => y 
     [c] => f 
    ) 

다음과 같은 방법으로 값으로 구조화되도록 열을 재정렬하려고합니다.

내 질문은 몇 가지 기본 PHP 함수를 사용하여이 작업을 수행 할 수있는 현명한 방법 내가 all ids in the array하여 "이 배열의 모든 a 열 값"을 의미한다고 가정

Array(
    [value of b=x] => Array(
     [value of c=t] => Array(all ids in the array) 
     [value of c=f] => Array(all ids in the array) 
    ) 
    [value of b=y] => Array(
     [value of c=t] => Array(all ids in the array) 
     [value of c=f] => Array(all ids in the array) 
    ) 

)   
+1

정확하게 수행 한 네이티브 함수가 있더라도 루핑의 문제점은 무엇입니까? 네이티브 함수는 무대 뒤에서도 루프해야합니다. – deceze

답변

2

모든 것을 통해 반복하지 않고있어,이 . 이 경우에, 이것은 당신이 원하는 : ids에 의해 당신이 외부 배열 인덱스를 의미하는 경우

$result = array(); 

array_walk($array, function($val, $key) use (&$result) { 
    $result[$val['b']][$val['c']][] = $val['a']; 
}); 

print_r($result); 

, 단순히 위의 코드에 $key$val['a']을 변경합니다.

+0

나는'array_walk' 대신에'foreach' 만 가지고 갈 것입니다. 이것은 다른 변장에서 실제로 같은 것입니다. – deceze

+0

@deceze 특히 많은 세계가 여전히 <5.3 (클로저 없음)으로 실행되고 있으므로 스코핑을 훨씬 쉽게 처리 할 수 ​​있기 때문에 100 % 동의합니다. 그러나 그는 네이티브 함수 구현을 요청했기 때문에 네이티브 함수 그는 수행해야한다. 누군가가 저에게 최근에 한 점에 대해서 (마이크로 최적화 처분의 경우) C++ 루프는 PHP 루프보다 더 효율적입니다. – DaveRandom

+0

나는 C++ 루프가 빠르다는 것에 동의하지만 함수 호출 오버 헤드에 의해 무효화되지 않는지 궁금하다. – deceze