我有一个来自数据库的结果集的 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');
最佳答案
在您的sql中按名称和人口进行第一个排序,因为您的示例似乎显示了以这种方式排序的所有内容,除了提升到顶部的特定名称(madhapur)之外
(注意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);
关于php - 根据给定的字符串对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744860/