2014-01-26 4 views
2

Вход:Сортировка массивов в пределах массива, по имени

$sql = array(

    array("id"=>"47", "name"=>"Jason", "device"=>"idevice"), 
    array("id"=>"49", "name"=>"uniKornn", "device"=>"idevice"), 
    array("id"=>"50", "name"=>"jacob", "device"=>"idevice") 
) 

Выход:

$sql = array(

    array("id"=>"50", "name"=>"jacob", "device"=>"idevice"), 
    array("id"=>"47", "name"=>"Jason", "device"=>"idevice"), 
    array("id"=>"49", "name"=>"uniKornn", "device"=>"idevice") 
) 

Я хочу, чтобы установить порядок массива $ SQL, по имени, и не чувствительны к регистру.

+1

И что вы пробовали? – Crozin

+0

Я пробовал использовать 'sort ($ sql)', но это не сработало ... – 131

+0

Как насчет ksort ($ sql) –

ответ

5
function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     return strnatcmp($a[$key], $b[$key]); 
    }; 
} 

usort($sql, build_sorter('name')); 

EDIT: Для регистронезависимыми:

Вариант 1:

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     return strnatcasecmp($a[$key], $b[$key]); 
    }; 
} 

usort($sql, build_sorter('name')); 

Вариант 2:

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     return strnatcmp(strtolower($a[$key]), strtolower($b[$key])); 
    }; 
} 

usort($sql, build_sorter('name')); 

Полный код:

<?php 

$sql = array(
    array("id"=>"47", "name"=>"Jason", "device"=>"idevice"), 
    array("id"=>"49", "name"=>"uniKornn", "device"=>"idevice"), 
    array("id"=>"50", "name"=>"jacob", "device"=>"idevice") 
); 

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     return strnatcmp(strtolower($a[$key]), strtolower($b[$key])); 
    }; 
} 

usort($sql, build_sorter('name')); 

foreach ($sql as $item) { 
    echo $item['id'] . ', ' . $item['name'] .', ' . $item['device'] . "\n"; 
} 

?> 
+0

Это работает, но с учетом регистра. Он заказывает A-Z a-z. Я хочу, чтобы он был нечувствителен к регистру. – 131

+0

['strnatcasecmp'] (http://www.php.net/manual/en/function.strnatcasecmp.php) – Emissary

+0

Так оно и было. Благодаря! – 131

-1

или краткая версия для строк

function cmp($a, $b) 
{ 
    return strcmp($a["name"], $b["name"]); 
} 

usort($array, "cmp"); 
Смежные вопросы