【问题标题】:Dealing with equal numbers in usort PHP在 usort PHP 中处理相等的数字
【发布时间】:2017-06-10 03:31:58
【问题描述】:

我试图让 PHP 比较两个值并使用 usort() 对它们进行排序。我有这个功能,它可以工作,但是如果$a == $b,这个功能会停止运行,

停止运行此函数会阻止 PHP 文件中的其他函数运行。

<?php
function cmp($a, $b) {
    if ($a[4] == $b[4]) {
        return 0;
    }
    return ($a[4] < $b[4]) ? -1 : 1;
}
usort($participants_times,"cmp");
?>

当有两个相等的值时,我不介意哪个在另一个前面。我尝试设置return -1return 0return 1 时设置$a == $b,但它们对我不起作用。

任何帮助表示赞赏:)

【问题讨论】:

  • stop running 是什么意思?有什么错误吗?
  • 我有一些在这个函数之后运行的 php,当存在相等的值时它根本无法运行。我有var_dump()'d,我知道这个函数是问题所在,但我不知道如何从这个函数中获取错误。
  • 可以添加$a和$b的var_dump吗?

标签: php return usort


【解决方案1】:

您应该用嵌套的 if-else 语句替换三元运算符。在您的情况下,&gt;== 比较都返回 1。

if ($a[4] < $b[4])
    return -1;
else if ($a[4] > $b[4]) 
    return 1;
else
    return 0;

【讨论】:

  • 对不起在旧线程中提出一个愚蠢的问题但是你说它为 > 和 == 比较返回 1。如何 ? ==比较它不返回1,它返回0。如果==比较通过,它不会进入下一行比较
【解决方案2】:

因为你不在乎大小写,所以忽略它

function cmp($a, $b) {
    return ($a[4] < $b[4]) ? -1 : 1;
}

usort($participants_times,"cmp");

【讨论】:

    【解决方案3】:

    所以提供的答案很可能对我的问题是正确的 - 但是,在我的情况下,问题与我的 function() 的形式有关,其中我在函数中有一个函数和初始的第二次迭代功能失败。

    将我的 cmp() 函数移到调用它的函数之外解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多