【问题标题】:How to sort an array of arrays in php [duplicate]如何在php中对数组进行排序[重复]
【发布时间】:2025-11-30 12:40:01
【问题描述】:

我想根据 php 中的特定值对数组进行排序。我做了很多搜索,我使用了array_multisort() 方法。我的问题是有时数组排序不正确。我的问题是:

1.array_multisort()是正确的方法还是使用usort()更好

  1. 如果数组的大小太大,我应该等待更多时间让下一个代码运行(使用排序数组的代码)。我之所以这么问是因为当数组更大(例如超过 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 如果我理解正确,数组中的第一个元素(驱动程序)将是距离值最高的元素。我希望数组从低到高排序。
  • 是的,结果集已经排序,您只需将它们添加到数组中以进行进一步操作。新数组将根据您的排序方式按升序或降序排序:-)

标签: php arrays sorting


【解决方案1】:

试试这个:

$sort = array();
foreach($alldrivers as $k=>$v) {
    $sort['distance'][$k] = $v['distance'];
}

array_multisort($sort['distance'], SORT_DESC, $alldrivers);


echo "<pre>";
print_r($alldrivers);

参考:http://php.net/manual/en/function.array-multisort.php

【讨论】:

    【解决方案2】:
    <?php
    $ar1 = array(10, 100, 100, 0);
    $ar2 = array(1, 3, 2, 4);
    array_multisort($ar1, $ar2);
    
    var_dump($ar1);
    var_dump($ar2);
    ?>
    

    在本例中,经过排序后,第一个数组将包含 0、10、100、100。第二个数组将包含 4、1、2、3。第二个数组中的条目对应于第一个数组中的相同条目数组(100 和 100)也进行了排序。即它是排序索引的。在第一个数组中,0 位于 4 位,并且在第二个数组中同样排在第 1 位,4 位位于第 1 位。

    这就是你回答错误的原因

    【讨论】: