2016-06-26 20 views
0

私の配列は、このPHPで2つの条件付きusort()を適用するには?

Array 
(
    [0] => Array 
     (
      [last_name] => Kournikova 
      [first_name] => Anna 
      [gender] => Female 
      [date_of_birth] => 6/3/1975 
      [favorite_color] => Red 
     ) 

    [1] => Array 
     (
      [last_name] => Hingis 
      [first_name] => Martina 
      [gender] => Female 
      [date_of_birth] => 4/2/1979 
      [favorite_color] => Green 
     ) 

    [2] => Array 
     (
      [last_name] => Seles 
      [first_name] => Monica 
      [gender] => Female 
      [date_of_birth] => 12/2/1973 
      [favorite_color] => Black 
     ) 

    [3] => Array 
     (
      [last_name] => Abercrombie 
      [first_name] => Neil 
      [gender] => Male 
      [date_of_birth] => 2/13/1943 
      [favorite_color] => Tan 
     ) 

    [4] => Array 
     (
      [last_name] => Bishop 
      [first_name] => Timothy 
      [gender] => Male 
      [date_of_birth] => 4/23/1967 
      [favorite_color] => Yellow 
     ) 

    [5] => Array 
     (
      [last_name] => Kelly 
      [first_name] => Sue 
      [gender] => Female 
      [date_of_birth] => 7/12/1959 
      [favorite_color] => Pink 
     ) 

    [6] => Array 
     (
      [last_name] => Smith 
      [first_name] => Steve 
      [gender] => Male 
      [date_of_birth] => 3/3/1985 
      [favorite_color] => Red 
     ) 

    [7] => Array 
     (
      [last_name] => Bonk 
      [first_name] => Radek 
      [gender] => Male 
      [date_of_birth] => 6/3/1975 
      [favorite_color] => Green 
     ) 

    [8] => Array 
     (
      [last_name] => Bouillon 
      [first_name] => Francis 
      [gender] => Male 
      [date_of_birth] => 6/3/1975 
      [favorite_color] => Blue 
     ) 

) 

結果のように見えるこの

Kournikova Anna Female 6/3/1975 Red 
Hingis Martina Female 4/2/1979 Green 
Seles Monica Female 12/2/1973 Black 
Abercrombie Neil Male 2/13/1943 Tan 
Bishop Timothy Male 4/23/1967 Yellow 
Kelly Sue Female 7/12/1959 Pink 
Smith Steve Male 3/3/1985 Red 
Bonk Radek Male 6/3/1975 Green 
Bouillon Francis Male 6/3/1975 Blue 

は私がusort()に適用することができますどのような結果がLAST_NAME昇順

Hingis Martina Female 4/2/1979 Green 
Kelly Sue Female 7/12/1959 Pink 
Kournikova Anna Female 6/3/1975 Red 
Seles Monica Female 12/2/1973 Black 
Abercrombie Neil Male 2/13/1943 Tan 
Bishop Timothy Male 4/23/1967 Yellow 
Bonk Radek Male 6/3/1975 Green 
Bouillon Francis Male 6/3/1975 Blue 
Smith Steve Male 3/3/1985 Red 

で男性の前に女性になりたいですその順序で並べ替えますか?

+3

[PHP:usort()を使用して配列内でASCによってフィールドを2つ並べてソートする方法?]](http://stackoverflow.com/questions/38037042/php-how-to-sort-配列を使用して配列を使用してフィールドごとに2値ずつ) –

+0

あなたの問題を解決するためのリンクが必要ですhttp://stackoverflow.com/questions/2699086/sort-multi-dimensional -array-by-value – Abhishek

+0

@u_mulder問題をもっとはっきりさせるために、新しい質問をする必要がありました。 –

答えて

-1

ここに1つの解決策があります。

function compare($array1,$array2) 
{ 
    // if gender is equal we need to look at the last name 
    if ($array1['gender'] == $array2['gender']) 
    { 
    // so we look at the last name 
    return strcasecmp($array1['last_name'],$array2['last_name']); 
    } 
    // this happens to work for gender, F is before M 
    return strcasecmp($array1['gender'],$array2['gender']); 
} 

$data = [['last_name'  => 'Bonk', 
      'first_name'  => 'Radek', 
      'gender'   => 'Male', 
      'date_of_birth' => '6/3/1975', 
      'favorite_color' => 'Green'], 

     ['last_name'  => 'Seles', 
      'first_name'  => 'Monica', 
      'gender'   => 'Female', 
      'date_of_birth' => '12/2/1973', 
      'favorite_color' => 'Black'], 

     ['last_name'  => 'Abercrombie', 
      'first_name'  => 'Neil', 
      'gender'   => 'Male', 
      'date_of_birth' => '2/13/1943', 
      'favorite_color' => 'Tan']]; 

usort($data,'compare'); 

foreach ($data as $key => $value) 
{ 
    echo "<pre>$key: ".print_r($value,TRUE)."\n</pre>"; 
} 
+0

'$ data'には、それらの3つまたはすべてを含めるだけですか? –

+0

それらのすべては、もちろん、コードを長すぎるようにしたくありませんでした。 –

0

の女性befores男性によると、その後、LAST_NAME ASC並べ替え:

(あなたの配列が$dataに含まれていると仮定)

array_multisort(
    array_column($data, 'gender'), SORT_ASC, 
    array_column($data, 'last_name'), SORT_ASC, 
    $data 
); 

array_multisortはusortよりもはるかに高速である - 100Kアレイ上データセットは、約30倍高速です。

関連する問題