Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析文本文件_Php_Arrays_Sorting - Fatal编程技术网

Php 解析文本文件

Php 解析文本文件,php,arrays,sorting,Php,Arrays,Sorting,我需要一个建议 我需要废弃和解析文本文件(用于货币汇率)。下面是这个文件的一个小片段: c057z110323 h057z110323 a057z110323 b012z110323 c058z110324 h058z110324 a058z110324 c059z110325 h059z110325 a059z110325 c060z110328 h060z110328 a060z110328 c061z110329 h061z110329 a061z110329 c062z110330 h0

我需要一个建议

我需要废弃和解析文本文件(用于货币汇率)。下面是这个文件的一个小片段:

c057z110323
h057z110323
a057z110323
b012z110323
c058z110324
h058z110324
a058z110324
c059z110325
h059z110325
a059z110325
c060z110328
h060z110328
a060z110328
c061z110329
h061z110329
a061z110329
c062z110330
h062z110330
a062z110330
b013z110330
c063z110331
h063z110331
a063z110331
c064z110401
h064z110401
a064z110401
c065z110404
h065z110404
a065z110404
c066z110405
h066z110405
a066z110405
c067z110406
h067z110406
a067z110406
b014z110406
c068z110407
h068z110407
a068z110407
c069z110408
h069z110408
a069z110408
正如您可能看到的,有很多行(在原始文件中大约有80000行(每天添加的行很少)

字符串格式如下:

A000112233  
where  
A - type  
000 - number of the file (created this year)  
11 - year  
22 - month  
33 - day 
我使用以下代码片段从该文件中获取了25行最新代码:

    $file = "http://www.nbp.pl/kursy/xml/dir.txt";
    $data = file($file);
    $count = count($data);

    for($i = $count - 25; $i < $count; $i++)
    {
        if( substr($data[$i], 0, 1) === 'a' )
        {
            $latest[] = $data[$i];
        }
    }
现在,我需要比较每个数组元素,以获取当前日期前最近一个工作日的最新项。我这样做:

        $i = 1;
        foreach($latest as $row)
        {
            $plural = ($i > 1) ? 's' : null;

            if( substr(trim($row), -6) === date("ymd", strtotime("-" . $i . " day" . $plural) )
            {
                $filename = $row;
                break;
            }

            $i++;
        }
它运行得很好,但是我面临一个大问题。我无法按最新的六个字符对
$latest
数组进行排序。我尝试使用sort()、rsort()进行排序。它们都对我没有好处


有人能帮我解决这个问题吗,或者有更好的方法来完成我正在寻找的任务。

您需要使用自定义排序方法。您可以使用
usort
编写自己的比较函数:

从手册

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");
函数cmp($a,$b){
如果($a=$b){
返回0;
}
回报率($a<$b)?-1:1;
}
$a=数组(3,2,5,6,1);
usort($a,“cmp”);
比较函数必须返回一个 小于、等于或等于的整数 如果第一个 这个论点被认为是错误的 分别小于、等于或 大于第二个


您需要使用自定义排序方法。您可以使用
usort
编写自己的比较函数:

从手册

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");
函数cmp($a,$b){
如果($a=$b){
返回0;
}
回报率($a<$b)?-1:1;
}
$a=数组(3,2,5,6,1);
usort($a,“cmp”);
比较函数必须返回一个 小于、等于或等于的整数 如果第一个 这个论点被认为是错误的 分别小于、等于或 大于第二个

当你这样做的时候

for($i = $count - 25; $i < $count; $i++)
{
    if( substr($data[$i], 0, 1) === 'a' )
    {
        $latest[] = $data[$i];
    }
}
然后您可以按
键进行排序,如:

ksort($latest);
当你这样做的时候

for($i = $count - 25; $i < $count; $i++)
{
    if( substr($data[$i], 0, 1) === 'a' )
    {
        $latest[] = $data[$i];
    }
}
然后您可以按
键进行排序,如:

ksort($latest);

由于您只是询问如何按字符串的最后六个字符对字符串数组进行排序:

使用:


您可能需要先修剪()行,否则换行符和/或回车符将是最后6个字符的一部分。

因为您只是询问如何按字符串的最后6个字符对字符串数组进行排序:

使用:

您可能需要先修剪()行,否则换行符和/或回车符将是最后6个字符的一部分