2010-04-24 6 views
5

잠시 동안이 문제에 집착했습니다. 따라서 도움이 될 것입니다. 하나의 배열 (왼쪽)에 요소 목록이 들어 있습니다. 목표는 다른 배열 (오른쪽) 키를 왼쪽 배열의 값으로 정렬하는 것입니다.배열의 색인 순서를 변경하십시오.

왼쪽 배열

Array 
(
    [0] => ID 
    [1] => FirstName 
    [2] => LastName 
    [3] => Address 
) 

나는이

Array 
(
    [0] => Array 
    (
     [ID] => 3 
     [FirstName] => Pim 
     [LastName] => Svensson 
     [Address] => Finland 
    ) 

사람과 유사 할 것입니다 달성하기 위해 노력하고있어 오른쪽 배열

Array 
(
    [0] => Array 
    (
     [FirstName] => Pim 
     [Address] => Finland 
     [LastName] => Svensson 
     [ID] => 3 
    ) 
    [1] => Array 
    (
     [FirstName] => Emil 
     [Address] => Sweden 
     [LastName] => Malm 
     [ID] => 5 
    ) 
) 

? :) 도움이된다면 아, PHP 5.3을 실행 중입니다!

답변

7
$output = array(); 
foreach ($right as $array) { 
    foreach ($left as $field) { 
     $temp[$field] = $array[$field]; 
    } 
    $output[] = $temp; 
} 
+0

+1 간단하고, 명확하고, 효과적입니다. – goat

+0

멋진, 그것은 트릭을 했어! –

2

당신은 배열이 배열의 매개 변수는 당신이 할 수있는 다음 구분 얻을 것이다 폭발 후 배열 폭발 배열 스토어 다음이

$array = Array 
(
    [0] => Array 
    (
     [ID] => 3 
     [FirstName] => Pim 
     [LastName] => Svensson 
     [Address] => Finland 
    ); 

과 같은 변수에 배열을 폭발합니다 함몰 함수를 사용하여 원하는대로 아무렇게나 정렬하십시오

+0

결과가 있습니까 – udaya

0

나는 한 걸음 물러서서 실제로해야 할 일을 살펴볼 것입니다. 배열이 연관되어 있으므로 올바른 요소에 즉시 액세스 할 수 있습니다. 맞습니까? 따라서 출력을 foreach으로 출력하지 않는 한 순서대로 정렬 할 필요가 없습니다.

나는 다음과 같은 솔루션 중 하나 좋을 것 :

  1. 당신이 필요 "올바른"배열은 키 순서로하면, 데이터베이스 쿼리/유사한보고에 열을 선택 필요한 순서.
  2. 인쇄하려는 사람이 "왼쪽"배열에서 주문을 검색 한 다음 해당 키의 해당 값을 "올바른"배열에 인쇄하십시오.
+0

db에서 아무것도 선택하지 않고 simplexml로로드 된 XML에서 배열을 가져옵니다! –

0

글쎄, 귀하의 질문은 일반적으로, 일반적으로 연관 배열은 "위치"에 대한 문제를 해결하는 데 사용됩니다. 어쨌든, 당신이 찾고있는 것을 찾고있는 많은 방법이 있습니다.

당신은 목록을 (사용할 수 있습니다)하지만 기반의 위치입니다 :

foreach($oldArray as $o) 
{ 
    list($firstName,$lastName,$address,$id)=$oldArray; 
    $newArray[]=array($id,$firstName,$lastName,$address); 
} 

그러나이 후 대신 재 종류의 올바른 순서로 직접 배열을 채우기의 문제를 해결하는 가장 좋은 방법 :

+0

감사! 저는 두 번째이지만 다른 서비스에서 xml로 정보를 얻습니다. 이렇게하면 항상 데이터의 순서를 보장 할 수는 없습니다. 따라서이 이상한 탐구! :) –

3

uksort()을 사용하면 사용자 정의 함수로 배열 키를 정렬 할 수 있습니다. 예 :

function sort_by_array($array) { 
    // create a sorting function based on the order of the elements in the array 
    $sorter = function($a, $b) use ($array) { 
     // if key is not found in array that specifies the order, it is always smaller 
     if(!isset($array[$a])) return -1; 
     if($array[$a] > $array[$b]) { 
      return 1; 
     } 
     return ($array[$a] == $array[$b]) ? 0 : -1; 
    }; 
    return $sorter; 
} 
// $array contains the records to sort 
// $sort_array is the array that specifies the order 
foreach($array as &$record) { 
    uksort($record, sort_by_array(array_flip($sort_array))); 
} 

나는 5 가지 가능성을 이용한다.3 동적으로 함수를 정의하고 나는 변환 array_flip()를 사용

Array 
(
    [0] => ID 
    [1] => FirstName 
    [2] => LastName 
    [3] => Address 
) 

Array 
(
    [ID] => 0 
    [FirstName] => 1 
    [LastName] => 2 
    [Address] => 3 
) 

에이 쉽게 나중에 키를 비교 할 수 있습니다.

+2

유연한 1+이지만이 특별한 경우에는 지나치게 복잡하다고 생각합니다. – goat

+0

@chris : 예,이 경우 OP가 어레이에서 실제로 수행하고자하는 작업에 따라 복잡 할 수 있습니다. 그러나 나는이 방법에 대해 아무도 언급하지 않은 이유가 무엇인지 궁금해했고 가능한 것이라고 보여주고 싶었습니다. –

관련 문제