2015-01-28 1 views
0

У меня есть следующий массивСортировка Mutlidimensinal массива

Array(
      [0]= Array 
       ( 
       [name]=>room 
      other paramters 

      ) 
     [1]=Array (
     [name]=>abc 
     and so on 

    ) 

    ) 

Я хочу, чтобы сортировать по имени

я пытался использовать usort. но я не могу получить надлежащие результаты

usort($array,'sort_by_name'); 
function sort_by_name($a,$b) { 
return $a- $b; 
} 

Любая идея?

Благодаря

+0

'usort()', вероятно, не то, что вам нужно, и не показывая остальную часть кода мы можем только предположить, что вы не используете его правильно. Попробуйте 'ksort()'. – Slime

+0

@slime 'ksort' сортирует по ключу, а не по значению. Как в '0', так и' 1'. @OP 'usort' является правильным, и в вашей функции сравнения просто используйте что-то вроде' return strcasecmp ($ a ['name'], $ b ['name']); 'в вашей функции сравнения. php уже имеет функцию сравнения строк, которая возвращает правильные значения, вам просто нужно ссылаться на ключ. –

+0

'function sort_by_name ($ a, $ b) { return strcmp ($ a ['name'], $ b ['name']); } 'возможно? –

ответ

1

Вы должны использовать array_multisort. Для вашего конкретного примера, где $array является начальный массив:

$names = array(); 
foreach ($array as $key => $row) 
{ 
    $names[$key] = $row['name']; 
} 
array_multisort($names, SORT_ASC, $array); 
0

Этот метод позволяет сортировать данные в направлении, указать поле, и сказать, если поле даты.

private function multiSort($data, $sortDirection, $field, $isDate) { 
if (empty($data) || !is_array($data) || count($data) < 2) { 
    return $data; 
} 

$parts = explode("/", $field); 
foreach ($data as $key => $row) { 
    $temp = &$row; 
    foreach ($parts as $key2) { 
     $temp = &$temp[$key2]; 
    } 
    $orderByDate[$key] = ($isDate ? strtotime($temp) : $temp); 
} 
unset($temp); 
unset($parts); 

if ($sortDirection == "SORT_DESC") { 
    array_multisort($orderByDate, SORT_DESC, $data); 
} else { 
    array_multisort($orderByDate, SORT_ASC, $data); 
} 
unset($orderByDate); 
return $data; 
} 

Этот блог должен быть полезным: Multisort by key