【问题标题】:Sort array by keys of another array按另一个数组的键对数组进行排序
【发布时间】:2011-02-10 17:14:26
【问题描述】:

有 2 个数组,长度和键都相同:

$a1 = [1=>2000,65=>1354,103=>1787];
$a2 = [1=>'hello',65=>'hi',103=>'goodevening'];

asort($a1);

a1 和 a2 的键是数据库中的 id。

a1 按值排序。排序后,我们如何在a2中使用相同的排序顺序?

谢谢!

【问题讨论】:

    标签: php arrays sorting key


    【解决方案1】:

    我相信这行得通:

    $a1 = array(1=>2000,65=>1354,103=>1787);
    $a2 = array(1=>'hello',65=>'hi',103=>'goodevening');
    
    asort($a1); // sort $a1, maintaining array index
    
    // sort $a2 by key, using the order of $a1
    function my_uksort($a, $b) {
        global $a1;
    
        return $a1[$a] < $a1[$b] ? -1 : 1;
    }
    uksort($a2, 'my_uksort');
    
    var_dump($a1);
    var_dump($a2);
    

    【讨论】:

    • 谢谢!这似乎工作得很好。我更喜欢使用自定义排序函数而不是使用 foreach。
    • 谢谢,这也帮助了我。
    【解决方案2】:

    也许不是最佳的......但它很短:

    $a1 = array(1=>2000,65=>1354,103=>1787);
    $a2 = array(1=>'hello',65=>'hi',103=>'goodevening');
    asort($a1);
    
    foreach(array_keys($a1) as $i) $out[$i] = $a2[$i];
    
    echo join("\n", $out);
    

    查看 uasort() 也

    【讨论】:

      【解决方案3】:
      foreach($a1 as $key => $value){
         //do something with $a2
         echo $a2[$key];
      }
      

      【讨论】:

      • 那么有没有办法用内置的PHP函数做到这一点?
      • @marbrun:您可以使用一些内置的 PHP 函数来使其工作。我只是觉得这要容易得多。 AFAIK,没有一种功能可以为您完成并仍然保持关键关联
      【解决方案4】:

      如果您可以处理丢失的 ID 关联,您可能想查看 array_multisort()(数组将被重新索引)。

      array_multisort($a1, $a2);
      

      【讨论】:

      • 我无法处理丢失键关联,因为这会形成两个数组之间的关系。
      • 关系将保持不变。问题是您以后是否在某个地方使用那些真实的(数据库)ID。如果您需要它们,那么没有办法在一个电话中完成(请参阅:php.net/manual/en/array.sorting.php)。只需使用其他答案中提供的自定义用户排序功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2017-04-02
      相关资源
      最近更新 更多