【问题标题】:Usort multidimensional array in PHP isn't working for mePHP中的Usort多维数组对我不起作用
【发布时间】:2017-07-15 23:54:02
【问题描述】:

直接使用文档中的示例,我无法弄清楚为什么我会得到我现在的结果。

function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = 1000;
$fruits[1]["fruit"] = 600;
$fruits[2]["fruit"] = 2180;

echo ("<pre>");
echo " before  \n";
print_r($fruits);
echo ("</pre>");

usort($fruits, "cmp");

echo ("<pre>");
echo "  after \n";
print_r($fruits);
echo ("</pre>");

这些是结果:

 before  
Array
(
    [0] => Array
        (
            [fruit] => 1000
        )

    [1] => Array
        (
            [fruit] => 600
        )

    [2] => Array
        (
            [fruit] => 2180
        )

)
  after 
Array
(
    [0] => Array
        (
            [fruit] => 1000
        )

[1] => Array
    (
        [fruit] => 2180
    )

[2] => Array
    (
        [fruit] => 600
    )

)

我认为 usort 旨在根据多维数组中的值进行组织。有时它对它进行排序,有时它只是给出一个随机顺序作为输出数组。我错过了什么吗?另外,这不是一个重复的问题,请仔细阅读本网站上没有类似的内容。

【问题讨论】:

  • 我错过了什么吗? 是的,整数不是字符串,所以不要使用字符串比较函数。
  • 总是假设你一开始就错了。损坏的不是 PHP 的 usort 函数;在这种情况下,这是用户的逻辑。学习正确识别您正在使用的类型和操作。您将数字作为字符串进行比较,PHP 正在对这些字符串进行适当的排序。

标签: php multidimensional-array usort


【解决方案1】:

在您的示例中,您使用函数strcmp 来比较整数,但该函数用于比较二进制安全字符串。您需要使用另一个函数或只是像&gt; 这样的运算符。因此,您的数组已被 PHP 正确排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多