我有一个多维数组:
$array[0] = array ( name => "Bob",
position => "Chair",
email => "bob@foo.bar"
);
$array[1] = array ( name => "Al",
position => "",
email => "al@foo.bar"
);
//etc..
我想对它进行排序,以便那些位置!=“”是第一个,然后其余按字母顺序排列......我不是很熟悉w /排序多维数组,有人能帮帮我吗? 谢谢!
答案 0 :(得分:4)
<?php
$array[0] = array ( name => "Bob", position => "Chair", email => "bob@foo.bar");
$array[1] = array ( name => "Al", position => "",email => "al@foo.bar");
print_r($array);
$idxPos = array();
for ($i=0;$i<count($array);$i++)
{
$idxPos[$i] = $array[$i]["position"];
}
arsort($idxPos);
$arrayNew = array();
$sortedKeys = array_keys($idxPos);
for($p=0;$p<count($idxPos);$p++)
{
$arrayNew[] = $array[$sortedKeys[$p]];
}
$array = $arrayNew;
print_r("<br />");
print_r($array);
?>
答案 1 :(得分:1)
usort
函数可能是你最好的选择:
usort($array, function($a, $b) {
if (empty($a['position']) && !empty($b['position'])) {
return 1;
}
else if (!empty($a['position']) && empty($b['position'])) {
return -1;
}
else {
return strcmp($a['name'], $b['name']);
}
});
PHP 5.3.0中引入了匿名函数。如果您使用的是早期版本,则可以改为定义常规函数:
function cmp($a, $b) {
if (empty($a['position']) && !empty($b['position'])) {
return 1;
}
else if (!empty($a['position']) && empty($b['position'])) {
return -1;
}
else {
return strcmp($a['name'], $b['name']);
}
}
usort($array, 'cmp');
答案 2 :(得分:0)
您可能想尝试使用usort,这样您就可以使用自定义排序功能。在排序功能中,您可以按照描述的方式检查[“位置”]与b [“位置”]。