2010-07-21 151 views
0

我有一個多維數組的一部分:排序多維數組

$array[0] = array (name => "Bob", 
    position => "Chair", 
    email => "[email protected]" 
); 
$array[1] = array (name => "Al", 
    position => "", 
    email => "[email protected]" 
); 
//etc.. 

我想排序,使那些位置=「」首先,那麼剩下的字母排列順序......我對於多維數組的排序不太熟悉,有人可以幫助我嗎? 謝謝!

+0

以什麼順序你想在沒有位置是在那些?例如,通過電子郵件/姓名按字母順序還是按原始順序? – salathe 2010-07-21 19:55:36

+0

可能的重複[如何按值排序多維數組?](http://stackoverflow.com/questions/3281841/how-do-i-sort-a-multi-dimensional-array-by-value ) – Wrikken 2010-07-21 19:58:07

回答

3
<?php 
$array[0] = array (name => "Bob", position => "Chair", email => "[email protected]"); 
$array[1] = array (name => "Al", position => "",email => "[email protected]"); 
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); 
?> 
+0

gosh,它的硬格式我的PHP。 – Irwin 2010-07-21 20:18:34

+0

反引用通常最適合'$ small_bits',而縮進4位則最適合代碼塊。編輯,使事情看起來更漂亮:) – Matchu 2010-07-21 20:30:59

+0

謝謝@Matchu! – Irwin 2010-07-22 02:41:52

0

您可能會想要嘗試使用usort,以便您可以使用自定義排序功能。在排序功能中,您可以按照您描述的方式檢查[「position」]和b [「position」]。

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