从PHP

时间:2015-10-11 12:15:33

标签: php arrays sorting

嗨我有一个名为asc.txt的文件,这个文件在每行中都有整数,如9 8 100,在其他行中假设为2 1 100.目标是按升序对每一行进行排序。下面的代码只排序一行。当我添加其他行时,它不会排序。感谢

<?php

//按换行符拆分文件&#34; \ n&#34;使用explode()

进入数组
$variable=file_get_contents('asc.txt');
$file = explode(" ",$variable);

//使用sort()

排序数组
sort($file);
echo implode(",\n", $file);

?>

文件中的输入是

1 9 8 100
2 1 5 1000

输出应为

1 8 9 100
1 2 5 1000

4 个答案:

答案 0 :(得分:2)

可以做:

foreach (new SplFileObject('asc.txt') as $lineInFile) {
    preg_match_all('/\d+/', $lineInFile, $numbersInFile);
    sort($numbersInFile[0], SORT_NUMERIC);
    echo implode(' ', $numbersInFile[0]), PHP_EOL;
};

这将流读取您的输入文件,将一行中的所有数字匹配到一个数组中,对该数组进行排序并输出它。根据您的排序需求,您还可以使用natsort()

至于输出:

我假设您在命令行上使用此脚本。如果您想在浏览器中使用换行符显示此内容,请添加<br>元素或使用nl2br或将输出封装到<pre>元素中,或使用CSS&{39; s {{{ 1}}。

答案 1 :(得分:0)

当你爆炸你的弦时,将你的针设置为“\ n”

<?php
//Split file by newlines "\n" into an array using explode()

$variable=file_get_contents('asc.txt');
$file = explode("\n",$variable); // NOTICE "\n" AS NEEDLE

//sort array with sort()
sort($file);
echo implode(",\n", $file);

?>

答案 2 :(得分:0)

如果你的文件使用\ n样式换行,那么这应该有效,否则请尝试将\ n替换为\ r。     

$variable=file_get_contents('asc.txt');
$file = explode(" ", str_replace("\n", " ", $variable) );


sort($file);
echo implode(",\n", $file);
?>

答案 3 :(得分:0)

使用natsort()

$lines_array = file("asc.txt");
natsort($lines_array);
print_r($lines_array);

//if you need to echo the lines you can use:

foreach($lines_array as $line){
   echo $line."\n";
}

输出:

Array
(
    [1] => 2 1 100

    [2] => 5 1 100

    [0] => 9 8 100

    [3] => 16 1 100
)

natsort()会正确排序数字(而不是asort()