2016-07-14 3 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 
     ) 
) 

$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")); 

この与える:あなたはこれを行います10

0

ええと私は似たような解決策を考えていました:

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