使用参数 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]
.
我希望你现在能够理解 :).
我有问题 我的代码有效,但我不明白函数中的 $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]
.
我希望你现在能够理解 :).