繁体   English   中英

uksort() function 不工作

[英]uksort() function not working

我正在尝试使用自定义 function 对 PHP 中的数组进行排序,但它不起作用。 这是我正在使用的(简化的)代码:

        class Test {

            public function sortByVote($a, $b) {
                $v1 = $a['voteCount'];
                $v2 = $b['voteCount'];
                if ($v1 > $v2) return +1;
                if ($v1 < $v2) return -1;
                return 0;
            }

            function test() {
                $temp = array(
                    array("voteCount" => 1),
                    array("voteCount" => 4),
                    array("voteCount" => 9),
                    array("voteCount" => 2),
                    array("voteCount" => 3)
                );

                uksort($temp, array($this, "sortByVote"));
            }

        }

任何人都可以看到问题是什么?

uksort()进行排序。 在您的示例中,键只是从 0 到 4 自动生成的数字键。我认为您的意思是使用usort()排序。 或者,如果您希望保持索引关联但仍按值排序,那么您正在寻找uasort() 简而言之,你的排序很无聊。

您需要 usort()(用户按值排序),而不是 uksort()(用户按键排序) uksort 的回调接收 $temp 中元素的键 usort 的回调接收 $temp 中元素的值

这就是您可以使用usort以您想要的方式对该数组进行排序的方法。

class Test {
   private $myArray = [];

  public function __construct()
  {
    $this->myArray = [
         array("voteCount" => 1),
         array("voteCount" => 4),
         array("voteCount" => 9),
         array("voteCount" => 2),
         array("voteCount" => 3)
     ];
   }

  private function sortByVote($a, $b)
  {
    return $a <=> $b;
  }

  public function myArray()
  {
    return $this->myArray;
  }

  public function mySort()
  {
    return usort($this->myArray, 'Test::sortByVote');
  }

}

$t = new Test;
$t->mySort();

$result = $t->myArray();

结果:

Array
(
[0] => Array
    (
        [voteCount] => 1
    )

[1] => Array
    (
        [voteCount] => 2
    )

[2] => Array
    (
        [voteCount] => 3
    )

[3] => Array
    (
        [voteCount] => 4
    )

[4] => Array
    (
        [voteCount] => 9
    )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM