如何在PHP中应用带两个条件的usort()?
我的数组看起来像这样如何在PHP中应用带两个条件的usort()?,php,arrays,sorting,usort,Php,Arrays,Sorting,Usort,我的数组看起来像这样 Array ( [0] => Array ( [last_name] => Kournikova [first_name] => Anna [gender] => Female [date_of_birth] => 6/3/1975 [favorite_color] => Red
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
我希望结果是女性先于男性
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
如何应用usort按顺序对它们进行排序?这里有一个解决方案
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>";
}
先按雌性排序,再按姓ASC排序: 假设数组包含在$data中
array_multisort比usort快得多-在100k数组数据集上,大约快30倍。可能重复希望以下链接解决您的问题@u_mulder我不得不问一个新问题,只是为了让我的问题更清楚。问两个问题不是解决问题的方法;编辑第一个来澄清。我让他这么做,也许我应该要求重写原来的问题。对不起,对于$data,我只包括这三个还是全部?当然,我不想让代码太长。
array_multisort(
array_column($data, 'gender'), SORT_ASC,
array_column($data, 'last_name'), SORT_ASC,
$data
);