2016-07-14 4 views
0

특정 값으로 배열 연관을 정렬하는 방법을 찾고 있는데 가능한 경우 확실하지 않습니다. 내가 array_multisort()usort() 기능으로 시도했지만, 나는 그것을 얻을 수 없다는 두려워.PHP - 특정 값으로 배열 연관 연관

예 : 나는 'BOX'으로 주문하려면

$array[] = array('id' => 74215, 'type' => 'BOX'); 
$array[] = array('id' => 76123, 'type' => 'UNT'); 
$array[] = array('id' => 71231, 'type' => ''); 
$array[] = array('id' => 79765, 'type' => 'UNT'); 
$array[] = array('id' => 77421, 'type' => 'BOX'); 

후 배열은 다음과 같습니다 나는 'UNT'및 주문 같은 다른 문자열을 전달할 수

Array (
    [0] => Array 
     (
        [id] => 77421 
        [type] => 'BOX' 
     ) 
    [1] => Array 
     (
        [id] => 74215 
        [type] => 'BOX' 
     ) 
    [2] => Array 
     (
        [id] => 76123 
        [type] => 'UNT' 
     ) 
    . 
    . 
    . 

그렇게함으로써. 이것이 가능합니까 ??

+0

쇼. –

+0

_ " 'BOX'"로 주문하고 싶다면 "_ 매우 논리적이지 않습니다. 'type' 명령으로 주문 하시겠습니까? – FirstOne

+0

일부 참조 : [PHP에서 배열 및 데이터를 정렬하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) ** && ** [PHP 정렬 배열을 SubArray로] (http://stackoverflow.com/questions/2477496/php-sort-array-by-subarray-value) – FirstOne

답변

1

나는 당신이 문자열 매치에 의해 "정렬"한다고 가정하고, 처음에는 그 문자열과 매치하는 사람들을, 그렇지 않은 사람들은 모두 "매치"한다고 가정합니다. 당신은 오래된 PHP 버전을 사용하지 않는 한,이 일할 수 :

$sortvalue = 'BOX'; 
usort($array, function($a, $b) use ($sortvalue) { 
     if($a['type'] == $sortvalue) return -1; 
     elseif($b['type'] == $sortvalue) return 1; 
     else return 0; 
    }); 

이 배열의 전면에있는 'BOX'항목을 넣어해야합니다.

return 0 대신 다른 모든 그룹화가 수행되는 경우 return $a['type'] < $b['type'].

편집 : 통합 카말의 친구의 제안/수정

+1

'$ sortvalue'는 익명 함수 내에서 접근 할 수 없습니다. 클로저를 사용해야합니다.'function ($ a, $ b) use ($ sortvalue) ...'.. 또한 http://stackoverflow.com/questions/18616214/confusion-with-php-closures를 참조하십시오. –

+0

완벽하게 작동합니다. 감사합니다. 너무 많이 @ 자카미 – bey23

+0

@ kamal-pal : 내 대답을 조정합니다. 감사. – Jakumi

0

나는 PHP가 그 않는 자신의 함수의 경우 잘 모르겠지만, 나는 그것이 도움이되기를 바랍니다, 내 자신을 쓰기 :

function sortArray($array_x, $key) 
{ 
    $added_indexes; 
    $new_array; 

    for($i=0;$i<count($array_x);$i++) 
    { 
     if($array_x[$i]['type']==$key){ 
      $new_array[]=$array_x[$i]; 
      $added_indexes[]=$i; 
     } 
    } 

    for($i=0;$i<count($array_x);$i++) 
    { 
     if(!in_array($i,$added_indexes)) 
     { 
      $new_array[]=$array_x[$i]; 
     } 
    } 

    return $new_array; 
} 

그래서 때

Array 
(
    [0] => Array 
     (
      [id] => 74215 
      [type] => BOX 
     ) 

    [1] => Array 
     (
      [id] => 77421 
      [type] => BOX 
     ) 

    [2] => Array 
     (
      [id] => 76123 
      [type] => UNT 
     ) 

    [3] => Array 
     (
      [id] => 71231 
      [type] => 
     ) 

    [4] => Array 
     (
      [id] => 79765 
      [type] => UNT 
     ) 
) 
,536,913,632 :

$array[] = array('id' => 74215, 'type' => 'BOX'); 
$array[] = array('id' => 76123, 'type' => 'UNT'); 
$array[] = array('id' => 71231, 'type' => ''); 
$array[] = array('id' => 79765, 'type' => 'UNT'); 
$array[] = array('id' => 77421, 'type' => 'BOX'); 

print_r(sortArray($array,"BOX")); 

이 부여 : 당신은이 작업을 수행

0

그래 내가 비슷한 솔루션으로 생각하고 있었다 10 : 당신이 시도 것을

usort($array, function ($a, $b) { 
    return $a['type'] == 'BOX' ? -1 : ($b['type'] == 'BOX' ? 1 : 0); 
});