我不知道为什么我无法获得预期的结果。 结果显示2> 10> 1但我想要10> 2> 1 谁能帮我?感谢
<?
function reorder($a, $b)
{
$a = substr($a, strlen("a/"));
$a = substr($a, 0, -strlen(".php"));
$b = substr($b, strlen("a/"));
$b = substr($b, 0, -strlen(".php"));
switch ($a) {
case "1m_microUSB_cable":
$a['order'] = 1;
break;
case "25cm_microUSB_cable":
$a['order'] = 2;
break;
case "30cm_lightning_cable":
$a['order'] = 3;
break;
case "1.5m_lightning_cable":
$a['order'] = 5;
break;
case "1m_lightning_cable":
$a['order'] = 4;
break;
case "1m_microUSB_upgrade_cable":
$a['order'] = 6;
break;
case "hand_ring_cable_Android":
$a['order'] = 7;
break;
case "hand_ring_cable_Apple":
$a['order'] = 8;
break;
case "Light_bulb_key_ring":
$a['order'] = 9;
break;
case "candy_machine":
$a['order'] = 10;
break;
default:
$a['order'] = 999;
}
switch ($b) {
case "1m_microUSB_cable":
$b['order'] = 1;
break;
case "25cm_microUSB_cable":
$b['order'] = 2;
break;
case "30cm_lightning_cable":
$b['order'] = 3;
break;
case "1.5m_lightning_cable":
$b['order'] = 5;
break;
case "1m_lightning_cable":
$b['order'] = 4;
break;
case "1m_microUSB_upgrade_cable":
$b['order'] = 6;
break;
case "hand_ring_cable_Android":
$b['order'] = 7;
break;
case "hand_ring_cable_Apple":
$b['order'] = 8;
break;
case "Light_bulb_key_ring":
$b['order'] = 9;
break;
case "candy_machine":
$b['order'] = 10;
break;
default:
$b['order'] = 999;
}
if ($a['order'] == $b['order']) {
return 0;
} elseif ($a['order'] > $b['order']) {
return -1;
} else {
return 1;
}
}
?>
我想重新排序数组,我使用
$glob = glob("a/*.php");
include ("reorder.php");
usort($glob, "reorder");
foreach ($glob as $filename) {
include ($filename);
include ("templates/a.php");
}
$ glob的转储:
array ( 0 => 'a/Light_bulb_key_ring.php', 1 => 'a/hand_ring_cable_Apple.php', 2 => 'a/hand_ring_cable_Android.php', 3 => 'a/1m_microUSB_upgrade_cable.php', 4 => 'a/1.5m_lightning_cable.php', 5 => 'a/1m_lightning_cable.php', 6 => 'a/30cm_lightning_cable.php', 7 => 'a/25cm_microUSB_cable.php', 8 => 'a/candy_machine.php', 9 => 'a/1m_microUSB_cable.php', )
我从1到9重新排序数组是好的但是当订单10时,订单10将在订单1之后但不是订单9.我不知道为什么?我希望有一个人可以帮助我。谢谢! 抱歉我的英语不好。
我很抱歉,我打字不清楚。因此,我创建了一个图像。
现在订单: Image 1
预期订单: Image 2
答案 0 :(得分:0)
给定的结果是词法顺序,而不是数字顺序。要强制数字顺序,请更改:
$aNum = intval($a['order']);
$bNum = intval($b['order']);
return $bNum - $aNum;
答案 1 :(得分:0)
我不太了解你的排序功能逻辑。任何带有其他值的文件名,然后是&#34; test0&#34;,&#34; test1&#34;和&#34; test2&#34;将具有相同的最高顺序&#34; 999&#34;。
如果您的所有文件名都包含&#34; test&lt; [\ d] +&gt; .php&#34;格式然后您可以简单地提取该值并将其用于比较:
function reorder($a, $b)
{
if (preg_match('|/a/test(\d+).php|', $a, $match)) {
$a = (int) $match[1];
} else {
$a = 999; // Filename is in different format so place it at the end of the list
}
if (preg_match('|/a/test(\d+).php|', $b, $match)) {
$b = (int) $match[1];
} else {
$b = 999;
}
return $a - $b;
}
$files = Array('/a/extra.php', '/a/test0.php', '/a/test1.php', '/a/test5.php', '/a/test10.php', '/a/test11.php', '/a/test100.php', '/a/test22.php',);
usort($files, 'reorder');
var_dump($files);
此输出:
array(8) {
[0]=>
string(12) "/a/test0.php"
[1]=>
string(12) "/a/test1.php"
[2]=>
string(12) "/a/test5.php"
[3]=>
string(13) "/a/test10.php"
[4]=>
string(13) "/a/test11.php"
[5]=>
string(13) "/a/test22.php"
[6]=>
string(14) "/a/test100.php"
[7]=>
string(11) "/a/extra.php"
}
答案 2 :(得分:0)
最后,我找到了答案。这是一个非常愚蠢的错误。
我想感谢所有在这里帮助我的人。谢谢!
$ a ['order']和$ b ['order']无法正常工作,因为$ a和$ b是字符串(含内容)。结果,$ a ['order']将改变字符串$ a的第一个字母(/ digit)。 ($ b同样的问题)
例如,如果$ a ['order'] = 2,$ a =“this_is_string”将被替换为$ a =“2his_is_string”。因此,如果$ a ['order'] = 10(任何两个或更多)数字),$ a将变为“1his_is_string”,顺序将为1但不是10.因此,发生了此错误。
要解决此问题,只需将所有$ a ['order']更改为$ a_order(或任何其他变量),将$ b ['order']更改为$ b_order(或任何其他变量)。强>
(抱歉我的英语不好)