PHP:使用-1和-10等值对数组进行排序-
我有一个函数,它从目录中获取文件名,然后将它们放入数组中。所有文件名都以代码开头,例如:-0-filename.php、-1-filename.php、-2-filename.php和-10-filename.php 经过一些步骤后,文件名将被回显。过程如下所示:PHP:使用-1和-10等值对数组进行排序-,php,arrays,Php,Arrays,我有一个函数,它从目录中获取文件名,然后将它们放入数组中。所有文件名都以代码开头,例如:-0-filename.php、-1-filename.php、-2-filename.php和-10-filename.php 经过一些步骤后,文件名将被回显。过程如下所示: rsort( $archiveArray ); $amount = count( $archiveArray ); $i = 0; while( $i <= $amount ) { echo $archiveArray[
rsort( $archiveArray );
$amount = count( $archiveArray );
$i = 0;
while( $i <= $amount )
{
echo $archiveArray[$i];
$i++;
}
$names = // your array of file names.
$sorted = // the sorted version names.
for($i = 0; $i < count($arr); $i++) {
$sorted[substr($names[$i], 1, strpos($names[$i], '-', 2))] = $names[$i];
}
print_r($sorted);
rsort($archiveArray);
$amount=计数($archiveArray);
$i=0;
而($irsort
有一个可选的第二个参数,名为sort\u flags
。使用sort\u NATURAL
进行“自然排序”
rsort
有一个可选的第二个参数,名为sort\u flags
。使用sort\u NATURAL
进行“自然排序”
您需要将数字转换为int
值。现在它被解释为字符串
。您可以这样做:
rsort( $archiveArray );
$amount = count( $archiveArray );
$i = 0;
while( $i <= $amount )
{
echo $archiveArray[$i];
$i++;
}
$names = // your array of file names.
$sorted = // the sorted version names.
for($i = 0; $i < count($arr); $i++) {
$sorted[substr($names[$i], 1, strpos($names[$i], '-', 2))] = $names[$i];
}
print_r($sorted);
$names=//文件名数组。
$sorted=//已排序的版本名。
对于($i=0;$i
基本上,您从$names
中获取名称,根据两个-
之间的数字在排序数组中给它一个索引,然后将其添加到$sorted
中。您需要将数字转换为int
值。现在它被解释为字符串。您可以这样做:>
rsort( $archiveArray );
$amount = count( $archiveArray );
$i = 0;
while( $i <= $amount )
{
echo $archiveArray[$i];
$i++;
}
$names = // your array of file names.
$sorted = // the sorted version names.
for($i = 0; $i < count($arr); $i++) {
$sorted[substr($names[$i], 1, strpos($names[$i], '-', 2))] = $names[$i];
}
print_r($sorted);
$names=//文件名数组。
$sorted=//已排序的版本名。
对于($i=0;$i
基本上,您可以从$names
中获取名称,根据两个-
之间的数字在排序数组中给它一个索引,然后使用rsort
和SORT\u NATURAL
将其添加到$sorted,如果您运行的是PHP5.4,则可以使用rsort
natsort( $archiveArray );
$archiveArray = array_reverse( $archiveArray );
…将执行相同的操作。只需使用natsort
执行自然顺序排序,然后反转数组
测试代码(PHP5.3.3):
如果您正在运行PHP5.4,则将rsort
与SORT\u NATURAL
结合使用会起作用。但是,如果您没有运行PHP5.4,则:
natsort( $archiveArray );
$archiveArray = array_reverse( $archiveArray );
…将执行相同的操作。只需使用natsort
执行自然顺序排序,然后反转数组
测试代码(PHP5.3.3):
另一种方法是,编写自己的排序标准
我使用正则表达式解析字符串中的数值,如下所示:
$files = array(
'-0-filename.php',
'-1-filename.php',
'-2-filename.php',
'-3-filename.php',
'-4-filename.php',
'-5-filename.php',
'-6-filename.php',
'-7-filename.php',
'-8-filename.php',
'-9-filename.php',
'-10-filename.php',
'-11-filename.php',
);
usort($files, 'CustomFileSequence');
var_dump($files);
function CustomFileSequence($a, $b)
{
$pattern = '/^\\-([0-9]*)\\-/';
preg_match($pattern, $a, $matches);
$a_val = $matches[1];
preg_match($pattern, $b, $matches);
$b_val = $matches[1];
if ($a_val < $b_val)
return 1;
if ($a_val > $b_val)
return -1;
if ($a_val == $b_val)
return 0;
}
另一种方法是,编写自己的排序标准
我使用正则表达式解析字符串中的数值,如下所示:
$files = array(
'-0-filename.php',
'-1-filename.php',
'-2-filename.php',
'-3-filename.php',
'-4-filename.php',
'-5-filename.php',
'-6-filename.php',
'-7-filename.php',
'-8-filename.php',
'-9-filename.php',
'-10-filename.php',
'-11-filename.php',
);
usort($files, 'CustomFileSequence');
var_dump($files);
function CustomFileSequence($a, $b)
{
$pattern = '/^\\-([0-9]*)\\-/';
preg_match($pattern, $a, $matches);
$a_val = $matches[1];
preg_match($pattern, $b, $matches);
$b_val = $matches[1];
if ($a_val < $b_val)
return 1;
if ($a_val > $b_val)
return -1;
if ($a_val == $b_val)
return 0;
}
我曾经这样做过:-
$files = array('-10-filename.php', '-9-filename.php', '-8-filename.php', '-10-filename.php', '-1-filename.php', '-0-filename.php');
$cmp = function($a, $b){
list($mt, $num1, $name) = explode('-', $a);
list($mt, $num2, $name) = explode('-', $b);
return $num1 - $num2;
};
usort($files, $cmp);
var_dump($files);
给我这个输出:-
array
0 => string '-0-filename.php' (length=15)
1 => string '-1-filename.php' (length=15)
2 => string '-8-filename.php' (length=15)
3 => string '-9-filename.php' (length=15)
4 => string '-10-filename.php' (length=16)
5 => string '-10-filename.php' (length=16)
如果要将它们反向排序,只需将比较函数中的最后一行更改为:-
return $num2 - $num1;
顺便说一句,你可能会发现这很有用。我过去经常这样做:-
$files = array('-10-filename.php', '-9-filename.php', '-8-filename.php', '-10-filename.php', '-1-filename.php', '-0-filename.php');
$cmp = function($a, $b){
list($mt, $num1, $name) = explode('-', $a);
list($mt, $num2, $name) = explode('-', $b);
return $num1 - $num2;
};
usort($files, $cmp);
var_dump($files);
给我这个输出:-
array
0 => string '-0-filename.php' (length=15)
1 => string '-1-filename.php' (length=15)
2 => string '-8-filename.php' (length=15)
3 => string '-9-filename.php' (length=15)
4 => string '-10-filename.php' (length=16)
5 => string '-10-filename.php' (length=16)
如果要将它们反向排序,只需将比较函数中的最后一行更改为:-
return $num2 - $num1;
另一方面,您可能会发现它很有用。您可以控制文件名吗?前导零会很有用。您的排序是使用usort
函数以错误的方式进行基数排序:您可以控制文件名吗?前导零会很有用。您的排序是使用usort函数:这不是做同样的事情吗?问题是它们被排序为字符串…更改了它,但什么都没有发生。编辑了答案。我不认为SORT_字符串是正确的。SORT_NATURAL是您想要的。它从PHP5.4开始就可用。SORT_NATURAL给我一个错误:“rsort()异常参数2太长,字符串在…”。这不会做同样的事情吗?问题是它们被排序为字符串…更改了它,但什么都没有发生。编辑了答案。我认为SORT_字符串是不对的。SORT_NATURAL是您想要的。它从PHP 5.4开始就可用。SORT_NATURAL给我一个错误:“rsort()EXPECTS参数2很长,字符串以…”。假设每个数字都是唯一的,这就行了,但是如果文件名的其他部分都是不同的,而每个数字都是唯一的,这就行了,但是如果文件名的其他部分都是不同的,那么每个数字都是唯一的,这就行了。如果这么简单,那就太棒了,但是如果我只使用你的代码片段,它会输出这些文件以非常随机的顺序排列,比如-0-、-7-、-4-、-1-、-8-、-2-…随机顺序?这很奇怪…您使用的是什么版本的PHP?我已经用我用来测试这个的代码更新了我的答案。您正在运行数组\u reverse
部分,对吗?natsort
保留键值关系,所以如果您使用while
在您的问题中循环,则值将不会以正确的顺序打印(请参阅我的示例中的第一个打印\r
).array\u reverse
在反转数组时将键固定为正确的值。如果您有shell访问权限,php-v
将告诉您。否则您可以创建一个phpinfo.php文件:
请确保在检查信息后删除phpinfo.php;不希望其他人找到它!:)抱歉,你编辑了你的评论而不是发布了另一条,所以我没有收到通知。我上面的打印\r
是为了演示;您不想使用它来输出文件。我会使用一个foreach
循环:foreach($archiveArray作为$file){echo$file;}
如果它这么简单的话那就太棒了,但是如果我只使用你的代码片段,它会以非常随机的顺序输出文件,比如-0-,-7-,-4-,-1-,-8-,-2-…随机顺序?真奇怪。。。您使用的是什么版本的PHP?我已经用我用来测试这个的代码更新了我的答案。您正在运行array\u reverse
部分,对吗natsort
保持键值关系不变,因此如果