簡體   English   中英

排序多維數組的一部分

[英]sorting part of a multidimensional array

我有一個多維數組:

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

我想對它進行排序,以便那些位置!=“”的人排在最前面,然后其余的按名稱按字母順序...我對排序多維數組不是很熟悉,有人可以幫助我嗎? 謝謝!

<?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);  
?>

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');

您可能需要嘗試使用usort,以便可以使用自定義排序功能。 在排序功能中,您可以按照描述的方式檢查a [“ position”]與b [“ position”]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM