基于给定字符串的数组排序

时间:2016-01-12 13:21:19

标签: php codeigniter sorting usort

我有一个php数组来自数据库的结果集。

因为我不太熟悉mySQL排序,我想根据特定的字符串“madhapur”排序我的结果集

$arr=array(    
    array("name" => 'madhapur',"population" =>'1000'),
    array("name" => 'jubiliee hills',"population" =>'800'),
    array("name" => 'madhapur',"population" =>'900'),
    array("name" => 'adikmet',"population" =>'200'),
    array("name" => 'sr nagar',"population" =>'3000'),
    array("name" => 'jubilee hills',"population" =>'1200'),
    array("name" => 'madhapur',"population" =>'1000')   
    );

我期待结果如下

$arr=array(
array("name" => 'madhapur',"population" =>'1000'),
array("name" => 'madhapur',"population" =>'1000'),
array("name" => 'madhapur',"population" =>'900'),
array("name" => 'adikmet',"population" =>'200'),
array("name" => 'jubilee hills',"population" =>'1200'),
array("name" => 'jubiliee hills',"population" =>'800'),
array("name" => 'sr nagar',"population" =>'3000'),
);

我尝试使用usort,但所有这些都用于按降序或升序排序。

function sortByName($a,$b){
         return $b['name'] - $a['name'];
    }
usort($arr,'sortByName');

3 个答案:

答案 0 :(得分:2)

您的sql中的名称和人口的第一个顺序,因为您的示例似乎显示除了特定名称(madhapur)提升到顶部之外以这种方式排序的所有内容

(注意DB类是一个例子,因为我不知道你使用的db访问方法):

$arr = DB::Query("SELECT name, population 
                  FROM tablename 
                  ORDER BY name ASC, population DESC");

然后你可以迭代数组,并在开头放置你想要的名字:

function nameAtFront($arr, $name){

    $copy = $arr;
    $total = count($arr);
    while($total--){
        if($copy[$total]['name']==$name){
            unset($arr[$total]);
            array_unshift($arr, $copy[$total]);
        }
    }
    return $arr;
}
$out = nameAtFront($arr, 'madhapur');
var_dump($out);

答案 1 :(得分:1)

要将名称madhapur排序到顶部,否则将元素的顺序保留为/ random:

usort($arr, function (array $a, array $b) {
    $a = $a['name'] == 'madhapur';
    $b = $b['name'] == 'madhapur';

    if ($a == $b || (!$a && !$b)) {  // both equal or both not madhapur
        return 0;
    } else if ($a) {
        return -1;
    } else {
        return 1;
    }
});

但这确实应该在SQL中完成。

答案 2 :(得分:0)

我希望这会对你有所帮助

function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
    $sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
    $ret[$ii]=$array[$ii];
}
$array=$ret;
}

有关详细信息,请参考 按值排序多维数组