根据给定的字符串进行数组排序

Array sorting based on the string given

我有一个 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');

要将名称 madhapur 排序到顶部,否则将元素的顺序保留为 is/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应该做的事情。

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

(注意 DB class 是一个例子,因为我不知道你使用什么数据库访问方法):

$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);

希望对您有所帮助

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;
}

有关更多详细信息,请参考 按值

对 Multi-dimensional 数组排序