使用参数 PHP 对函数进行排序和比较

usort and compare function with arguments PHP

我有问题 我的代码有效,但我不明白函数中的 $x[1] 和 $y[1] 是什么 我尝试了 $x[0]、$x[1]、$x[2]、$y[0]、$y[1]、$y[2],但没有得到逻辑输出?我哪里理解错了?请问有人可以帮助我吗?

<?php
$products = array( array('TIR', 'Tires', 100),
                   array('OIL', 'Oil', 10),
                   array ('SPK', 'Spark Plugs', 4));

//print_r ($products); echo '<br />';
                 
function compare($x, $y) {
    if ($x[1] == $y[1]) {
        return 0;
    } else if ($x[1]<$y[1]) {
        return -1;
    } else {
        return 1;
    }
}

usort ($products, 'compare');

echo compare('Tires', 'Tires' );
echo compare('Oil', 'Spark Plugs' );
echo compare('Spark Plugs', 'Oil' );
echo compare('Tires', 'Tires');
echo '<br />';

此代码的输出为 echo 1、2、3、4:

0
-1
1
0

当您调用 compare($x, $y) 函数时,您将字符串作为参数传递。这些字符串被视为具有基于 0 的索引的数组。

因此,当执行echo compare('Tires', 'Tires' );时,将传递这两个字符串,并根据比较函数,比较索引 1 处的字符(索引从 0 开始),即第 2 个字符。


所以,对于这个```echo compare('Tires', 'Tires' );```,比较的字符是'i'和'i',它们是相等的,因此返回0 .

所以,对于这个echo compare('Oil', 'Spark Plugs' );,比较的字符是'i'和'p'。 'i' 小于 p,因此返回 -1。要确定哪个字符低于另一个字符,请查找 ASCII 代码。

其他函数调用依此类推。如果您还有任何疑问,请告诉我。

我只是针对独立的 echo compare('Oil', 'Spark Plugs' ); 行进行了解释,而不是针对 usort 函数。


更新 usort 函数
首先让我解释一下比较器函数的工作方式。每当将两个参数传递给比较函数时,它 returns true 或 false 用于确定是否需要交换这些值。
在前面的例子中,echo compare('Tirez', 'Tires' );
$x = Tires,以及
$y = Tirez
您比较 $x[1]$y[1],尤其是索引 1 处的字符。但是如果在这些字符串的情况下,您只是执行 $x < &y,字符串会自动逐个字符进行比较根据英文字母的ASCII码返回结果在第一个位置,字符不匹配。
也就是说,如果你想比较一个字符串是否字典序小于另一个字符串,那么你可以使用下面的比较函数。

function compare($x, $y) {
    if ($x == $y) {
        return 0;
    } else if ($x < $y) {
        return -1;
    } else {
        return 1;
    }
}

输出将是 1,因为在逐个字符比较时 'z' > 's'


所以,当一个完整的数组被传递给比较函数时,前两个元素被传递。这里数组$products是一个二维数组(数组的数组),所以前两个数组传

$x = array('TIR', 'Tires', 100)
$y = array('OIL', 'Oil', 10)
所以,这取决于你的要求。例如,如果您想按 $products 的任何数组的索引 0 排序,即 'TIR'、'OIL'、'SPK',则将比较函数更改为 $x[0]$y[0].

我希望你现在能够理解 :).