排序多维数组的一部分

时间:2010-07-21 19:52:38

标签: php sorting arrays multidimensional-array

我有一个多维数组:

$array[0] = array ( name => "Bob",
    position => "Chair",
    email => "bob@foo.bar"
);
$array[1] = array ( name => "Al",
    position => "",
    email => "al@foo.bar"
);
//etc..

我想对它进行排序,以便那些位置!=“”是第一个,然后其余按字母顺序排列......我不是很熟悉w /排序多维数组,有人能帮帮我吗? 谢谢!

3 个答案:

答案 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 [“位置”]。