【发布时间】:2021-03-08 13:18:21
【问题描述】:
我有问题 我的代码有效,但我不明白函数中的 $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
【问题讨论】:
-
$x 和 $y 是您尝试排序的数组中的两个元素,它们将被传递到您的比较函数中。所以
$x[0]是其中一个子数组的第一个元素,$x[1]是第二个元素,依此类推。 -
我明白,但我的问题是如果我放 $x[2] 和 $y[2],我会得到正确的输出,但是如果我放 $x[1] 和 $y[ 1]我无法理解输出?我在哪里理解代码有误?
-
您的
echo compare('Tires', 'Tires' );等低于实际的usort调用,没有什么意义。这完全不同,在这里您将比较单词Tires的第二个或第三个字母。这些陈述在这里毫无意义。如果你想看看你的排序数组是什么样子 - 然后 var_dump 它。 -
$x[0] 是什么,首先取决于您调用函数的方式。当
usort调用您的函数时,它会传入您的数组元素之一 - 所以 $x 可以 f.e.是array('TIR', 'Tires', 100),那么 $x[0] 当然会引用该数组的TIR元素。当you 调用compare('Oil', 'Spark Plugs' )时,一开始就完全不同了——你在这里传递的不是参数数组,而是简单的字符串。所以 $x 现在是Oil,并且使用 [0] 访问它的第一个字符,得到O。 -
“我得到错误或不合逻辑的输出” - 你在这里比较苹果和橘子;
usort调用比较函数的方式和调用它的方式根本不同。对于您在那里所做的事情,输出 是“合乎逻辑的” - 但作为一种验证排序是否有效,或者您的比较函数是否正确用于该目的的方式,它是 不 合适。