2013-04-02 2 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. Я также использую версию sub 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

ahh, это имеет смысл для меня! Спасибо. –

Смежные вопросы