2014-01-26 177 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')); 

编辑:对于不区分大小写:

选项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");