【问题标题】:Sort a complex associative array in PHP [duplicate]在PHP中对复杂的关联数组进行排序[重复]
【发布时间】:2015-10-02 20:34:26
【问题描述】:

我在 PHP 中有一个关联数组,例如:

    $newarray1 = Array (
    [productA] => Array (
        [link] => http://sanjosespartan.com/blog/products/agile-java-development/
        [visitcount] => 4
        )
    [productD] => Array (
        [link] => http://sanjosespartan.com/blog/products/intro-to-go/
        [visitcount] => 1
        )
    [productG] => Array (
        [link] => http://sanjosespartan.com/blog/products/node-js-for-developers/
        [visitcount] => 1
        )
    [productB] => Array (
        [link] => http://sanjosespartan.com/blog/products/beginning-mysql/
        [visitcount] => 1
        )
    [productC] => Array (
        [link] => http://sanjosespartan.com/blog/products/computer-networks/
        [visitcount] => 1
        )
    [productF] => Array (
        [link] => http://sanjosespartan.com/blog/products/mongo-database/
        [visitcount] => 1
        )
    [productH] => Array (
        [link] => http://sanjosespartan.com/blog/products/python/
        [visitcount] => 1
        )
    [productI] => Array (
        [link] => http://sanjosespartan.com/blog/string-theory/
        [visitcount] => 1
        )
    [productJ] => Array (
        [link] => http://sanjosespartan.com/blog/tcs/
        [visitcount] => 1
        )
    [productE] => Array (
        [link] => http://sanjosespartan.com/blog/products/java-complete-refrence/
        [visitcount] => 2
        )
)

现在我需要根据访问次数对 整个 数组进行排序。 我尝试使用arsort,但没有成功。

【问题讨论】:

  • 你用usort标记了它,这也是正确的功能。查看PHP manual(示例#2),它描述了如何做到这一点。
  • 你的代码有太多错误,比如键是常量,会显示未定义,你的值是字符串但没有引号,你使用数组作为元素但没有逗号。
  • 如果您省略 http://sanjosespartan.com/blog/products/ 之类的常量并将其添加到代码中,您的表格会短很多。

标签: php arrays sorting associative-array usort


【解决方案1】:

已经有很多答案了。我喜欢这个:

https://stackoverflow.com/a/16788610/4632883

发帖前仔细看看!

【讨论】:

    【解决方案2】:

    您需要一个自定义回调函数,通过检查它们的 ["visitcount"] 字段来比较两个外部元素。这可以使用 usort 来完成,如果你有一个现代版本的 php,你可以使用一个未命名的 ad-hoc 函数来完成它(你不需要一个命名的函数)。

    usort 很简单:给它一个数组和一个函数,告诉它两个参数中哪个更大。比如:

    if($a["visitcount"]>$b["visitcount"]) return 1;
    if($a["visitcount"]<$b["visitcount"]) return -1;
    return 0;
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多