2013-04-02 121 views
0

比方說,我想排序數組名爲$關閉,看起來像這樣如何在PHP中排序在一個非常特定的順序數組

Array 
(
    [0] => Array 
     (
      [name] => alistair 
      [id] => 344 
     ) 
    [1] => Array 
     (
      [name] => barney 
      [id] => 333 
     ) 
    [2] => Array 
     (
      [name] => carlos 
      [id] => 100 
     ) 

我想,這樣它總是在對它進行排序這個命令:「carlos,alistair,barney」,如果這個名字不在排序中,它將不在數組中。我知道我必須使用usort,但我不知道如何做一個cmp。我也使用了一個子php5版本,所以我不能使用匿名函數。什麼是最簡單的方法來做到這一點?

回答

0
$arr = array(
    array('name' => 'alistair', 'id' => 344), 
    array('name' => 'barney', 'id' => 333), 
    array('name' => 'carlos', 'id' => 100), 
); 

$order = array(1 => 'carlos', 'alistair', 'barney'); 

usort($arr, function($a, $b) use($order) { 
    $a_index = array_search($a['name'], $order); 
    if (!$a_index) { 
     $a_index = 999; 
    } 

    $b_index = array_search($b['name'], $order); 
    if (!$b_index) { 
     $b_index = 999; 
    } 

    return $a_index - $b_index; 
}); 

var_dump($arr); 

在PHP4友好的方式一樣:這裏的錯誤:

$arr = array(
    array('name' => 'alistair', 'id' => 344), 
    array('name' => 'barney', 'id' => 333), 
    array('name' => 'carlos', 'id' => 100), 
); 

usort($arr, 'sorting_function'); 

function sorting_function($a, $b) 
{ 
    $order = array(1 => 'carlos', 'alistair', 'barney'); 

    $a_index = array_search($a['name'], $order); 
    if (!$a_index) { 
     $a_index = 999; 
    } 

    $b_index = array_search($b['name'], $order); 
    if (!$b_index) { 
     $b_index = 999; 
    } 

    return $a_index - $b_index; 
} 

var_dump($arr); 
+0

我得到一個 「語法錯誤,意外T_FUNCTION解析錯誤」。我使用的是php4是這個問題嗎? –

+0

@pg:是的。創建一個單獨的函數並將'$ order'聲明移到它的正文。匿名函數是在PHP 5.3 – zerkms

+0

中引入的,這對我來說很有意義!謝謝。 –