2012-12-06 2 views
0

키 값을 검사해야하는 배열을 통해 for 루프를 실행해야한다고 가정 해 봅시다. 일치하지 않는 요소와 일치하지 않는 배열 요소를 인쇄하고 싶습니다.두 개의 키 값을 기반으로 배열 키를 정렬하는 방법은 무엇입니까?

아래의 배열 (명확성을 위해 추가 된 값)을 사용하여 다음과 같이 인쇄하고 싶습니다. current_taglast_tag 값과 일치해야합니다. 일치하지 않으면 그 키는 다른 키보다 먼저 인쇄해야합니다.

원하는 결과

TEST2 

TEST1 
TEST3 
TEST4 

나는 배열을 정렬하는 사용자 정의 콜백 배열을 usort

array(2) { 
    [0]=> 
    array(3) { 
     ["name"]=> 
      string(3) "TEST1" 
     ["current_tag"]=> 
      string(13) "20121129_TEST1" 
     ["last_tag"]=> 
      string(13) "20121129_TEST1" 
    } 
    [1]=> 
    array(3) { 
     ["name"]=> 
      string(3) "TEST2" 
     ["current_tag"]=> 
      string(13) "20121205_TEST2" 
     ["last_tag"]=> 
      string(13) "20121129_TEST2" 
    } 
    ... 
    ... 
    ... 
    ... 
} 

답변

1

배열입니다. 정렬 후 모든 name 키를 인쇄 할 수 있습니다.

usort($array, function($a, $b) { 
    $match_a = $a['current_tag'] == $a['last_tag']; 
    $match_b = $b['current_tag'] == $b['last_tag']; 

    if ($match_a && $match_b) { 
     return 0; 
    } elseif ($match_a && !$match_b) { 
     return 1; 
    } elseif (!$match_a && $match_b) { 
     return -1; 
    } 
}); 

array_walk($array, function($item) { 
    echo $item['name']; 
}); 

잘못된 순서로 정렬 된 경우 1과 -1 반환 값을 전환하십시오.

+0

완벽하게 작동합니다. – luckytaxi

+0

그냥 뭔가 생각, 그 동안 작동하고 모든, 나는 그들을 "분리"하는 방법이 필요합니다. 따라서 첫 번째로 일치하지 않는 값을 출력하고 다른 배열 값과 구별하기 위해 중단 점이 따라야합니다. 위의 예를 참조하십시오. – luckytaxi

관련 문제