如何解决使用参数 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
函数。
UPDATE 对于 usort 函数
让我首先解释比较器函数的工作方式。每当将两个参数传递给比较函数时,它都会返回 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
数组(即 'TIR'、'OIL'、'SPK')的索引 0 排序,则将比较器函数更改为 $x[0]
和 $y[0]
。
我希望你现在能够理解:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。