-1

新来的,需要一些帮助。

我有一个包含以下元素的数组。

215/75R17.5
235/75R17.5
8.25R16
7.00R16
11R22.5
7.50R16

现在我需要弄清楚的是如何通过“R”之后的数字重新排序元素,然后是第一部分。

所以对此:

7.00R16
7.50R16
8.25R16
11R22.5
215/75R17.5
235/75R17.5

希望这是一个挑战:)

多谢你们

4

1 回答 1

0

首先,这显然是一个自定义比较;首选函数是usort,它接受自定义比较作为参数。

自定义比较函数如下所示:

function customCompare($x, $y) {
    $x = explode('R', $x);
    $y = explode('R', $y);
    if ($x[1] != $y[1]) return $x[1] < $y[1] ? -1 : 1;
    return strnatcmp($x[0], $y[0]);
}

看到它在行动

这个怎么运作

首先,我们在字符 上拆分每个输入字符串,从诸如 的字符串R中生成一个数组,例如. 在每个数组中,第二个元素是直径(第一个排序标准),第一个元素是宽度(第二个标准)。['8.25', '16']'8.25R16'

如果直径不同,那么我们会立即据此做出判断。

如果直径相等,那么我们使用strnatcmp比较宽度——这是为了使 100 的宽度大于 20 的宽度(愚蠢的 ASCII 比较会产生相反的结果)。

于 2013-09-26T12:29:22.823 回答