【发布时间】:2025-11-30 12:40:01
【问题描述】:
我想根据 php 中的特定值对数组进行排序。我做了很多搜索,我使用了array_multisort() 方法。我的问题是有时数组排序不正确。我的问题是:
1.array_multisort()是正确的方法还是使用usort()更好
- 如果数组的大小太大,我应该等待更多时间让下一个代码运行(使用排序数组的代码)。我之所以这么问是因为当数组更大(例如超过 5 个元素)时我会遇到问题。
这是我的 php 代码。
require_once __DIR__ . '/db_connect_win.php';
$db = new DB_CONNECT();
$alldrivers = array();
$result = mysql_query("SELECT *FROM temp") or die (mysql_error());
if(mysql_num_rows($result) > 0){
while($row = mysql_fetch_array($result)){
$driver = array();
$driver["id"] = $row["id"];
$driver["distance"] = $row["distance"];
$driver["gcm_reg_id"] = $row["gcm_reg_id"];
array_push($alldrivers,$driver);
}
if(count($alldrivers) > 0){
$sortarray = array();
foreach($alldrivers as $onedriver){
foreach($onedriver as $key=>$value){
if(!isset($sortarray[$key])){
$sortarray[$key] = array();
}
$sortarray[$key][] = $value;
}
}
$orderby = "distance";
array_multisort($sortarray[$orderby],SORT_ASC,$alldrivers);
include_once './GCM.php';
$gcm = new GCM();
$registation_ids = array($alldrivers[0]["gcm_reg_id"]);
$message = array("callorcancel"=>"get_yes");
$gcm_result = $gcm -> send_notification($registation_ids,$message);
echo $alldrivers[0]["id"];
}
}
mysql_query('TRUNCATE TABLE temp;');
问题是在排序数组中,索引为 0 的元素必须是距离值最小的驱动程序,但有时它是距离值最大的驱动程序
【问题讨论】:
-
为什么不对
SELECT * FROM temp order by some_col中的数据进行排序并推送到数组而不是重新排列数组? -
总是缩进你的代码,以便其他人可以阅读
-
@AbhikChakraborty 如果我理解正确,数组中的第一个元素(驱动程序)将是距离值最高的元素。我希望数组从低到高排序。
-
是的,结果集已经排序,您只需将它们添加到数组中以进行进一步操作。新数组将根据您的排序方式按升序或降序排序:-)