【问题标题】:Best way to sort an array depending on a subvalue [duplicate]根据子值对数组进行排序的最佳方法[重复]
【发布时间】:2015-06-07 14:04:26
【问题描述】:

我有一个这样创建的数组:

$myarray = array();
$myarray['id1'] = array('pos' => 3, 'data' => '...');
$myarray['id2'] = array('pos' => 1, 'data' => '...');
$myarray['id3'] = array('pos' => 2, 'data' => '...');

我想以pos 值的顺序迭代$myarray。我该怎么做?

我目前看到的唯一方法是从第一个有序数组重新创建一个新的有序数组。这当然是丑陋的......

编辑:这不是 this question 的副本。我想保持键链接到我的子数组。

【问题讨论】:

  • 你有没有尝试过?
  • 是的,从第一个数组重新创建一个新数组。那是丑陋的。为什么要投反对票?
  • 重复...也许。但是阅读文档,其他问题的解决方案不适合这种情况。

标签: php


【解决方案1】:

你可以使用uasorthttp://php.net/manual/en/function.uasort.php

定义自定义排序函数:

uasort($myarray, "mySortFunction");

function mySortFunction($a, $b){
  return $a["pos"] - $b["pos"]; //or $b - $a, depending on desired order
}

【讨论】:

    【解决方案2】:

    你可以使用uasort来保存key

    $myarray['id1'] = array('pos' => 3, 'data' => '...');
    $myarray['id2'] = array('pos' => 1, 'data' => '...');
    $myarray['id3'] = array('pos' => 2, 'data' => '...');
    
    uasort ($myarray, function($it1, $it2) { return $it1['pos'] - $it2['pos']; });
    var_dump($myarray);
    
    array(3) {
      ["id2"]=>
      array(2) {
        ["pos"]=>
        int(1)
        ["data"]=>
        string(3) "..."
      }
      ["id3"]=>
      array(2) {
        ["pos"]=>
        int(2)
        ["data"]=>
        string(3) "..."
      }
      ["id1"]=>
      array(2) {
        ["pos"]=>
        int(3)
        ["data"]=>
        string(3) "..."
      }
    }
    

    【讨论】:

    • 这个解决方案非常好。我想接受它,但它不适用于我的一个使用太旧版本的 php (5.2.17) 的工作站。 dognose的解决方案更通用。
    • @Caduchon 没问题 :) 而且是一样的
    猜你喜欢
    • 2013-12-19
    • 2021-12-22
    • 2011-12-15
    • 2010-09-07
    • 2011-10-28
    • 2021-08-28
    • 2017-05-23
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多