使用PHP在文本文件中显示相同的单词

使用PHP在文本文件中显示相同的单词,php,arrays,file,text-files,Php,Arrays,File,Text Files,我的文本文件如下: lebuzzdesbonsplans.com 26608 24798 friendcorp.fr 11343 9856 9283 messengear.fr 9090 8107 text.txt lebuzzdesbonsplans.com;hotmail.com;26608;828;3.11 lebuzzdesbonsplans.com;hotmail.fr;24798;876;3.53 friendcorp.fr;yahoo.fr;11343;0;0 friendco

我的文本文件如下:

lebuzzdesbonsplans.com 
26608
24798
friendcorp.fr
11343
9856
9283
messengear.fr
9090
8107
text.txt

lebuzzdesbonsplans.com;hotmail.com;26608;828;3.11
lebuzzdesbonsplans.com;hotmail.fr;24798;876;3.53
friendcorp.fr;yahoo.fr;11343;0;0
friendcorp.fr;free.fr;9856;12;.12
friendcorp.fr;wanadoo.fr;9283;1;.01
messengear.fr;free.fr;9090;11;.12
messengear.fr;laposte.net;8107;2;.02
....................................
....................................
PHP代码:

<?php
            $PMTA_FILE = file_get_contents("text.txt");
            $lineFromText = explode("\n", $PMTA_FILE);
            $title = "";
            $domain = "";
            foreach($lineFromText as $line){                    
                    $data = explode(";",$line);
                    $domain = $data[0];
                    if (array_key_exists($domain, $domains_seen)){
                        continue;

                    }
                 $domains_seen[$domain] = true; 
                 echo $domain;
                 echo "<br>";
                 echo $data[2]; 
                 echo "<br>";   
          }


?>
我不想要上面的结果,我需要下面的结果:

lebuzzdesbonsplans.com 
26608
24798
friendcorp.fr
11343
9856
9283
messengear.fr
9090
8107
任何知道的人请帮我找到解决方案,谢谢。

natsort($lineFromText);
natsort($lineFromText);
foreach($lineFromText as $line){                    
    $data = explode(";",$line);
    $domain = $data[0];
    if (!array_key_exists($domain, $domains_seen)){
        echo $domain;
        echo "<br>";
    }
    echo $data[2]; 
    echo "<br>";   
    $domains_seen[$domain] = true; 
}
foreach($lineFromText作为$line){ $data=分解(“;”,$line); $domain=$data[0]; 如果(!array_key_存在($domain,$domains_seen)){ echo$域; 回声“
”; } echo$数据[2]; 回声“
”; $domains_seen[$domain]=true; }
更新:首先对行进行排序-这样所有域都将收集在一起,

natsort($lineFromText);
foreach($lineFromText作为$line){
$data=分解(“;”,$line);
$domain=$data[0];
如果(!array_key_存在($domain,$domains_seen)){
echo$域;
回声“
”; } echo$数据[2]; 回声“
”; $domains_seen[$domain]=true; }
更新:首先对行进行排序-这样所有域都将收集在一起,您可以使用

$lines = array_reduce(file("text.txt", FILE_IGNORE_NEW_LINES), function ($a, $b) {
    $b = str_getcsv($b, ";");
    $a[$b[0]][] = $b[2];
    return $a;
});


foreach($lines as $k => $values)
{
    echo $k,PHP_EOL;
    echo implode(PHP_EOL, $values);
    echo PHP_EOL;
}
输出

lebuzzdesbonsplans.com
26608
24798
friendcorp.fr
11343
9856
9283
messengear.fr
9090
8107
你可以用

$lines = array_reduce(file("text.txt", FILE_IGNORE_NEW_LINES), function ($a, $b) {
    $b = str_getcsv($b, ";");
    $a[$b[0]][] = $b[2];
    return $a;
});


foreach($lines as $k => $values)
{
    echo $k,PHP_EOL;
    echo implode(PHP_EOL, $values);
    echo PHP_EOL;
}
输出

lebuzzdesbonsplans.com
26608
24798
friendcorp.fr
11343
9856
9283
messengear.fr
9090
8107

感谢上面的文件文本,但如果我像这样修改文件中的句子:
lebuzzdesbonsplans.com;hotmail.com;26608;828;3.11 friendcorp.fr;yahoo.fr;11343;0;0 lebuzzdesbonsplans.com;hotmail.fr;24798;876;3.53 friendcorp.fr;free.fr;9856;12;.12 Messenger.fr;free.fr;9090;11;.12 friendcorp.fr;wanadoo.fr;9283;1.01 messenger.fr;laposte.net;8107;2.02
它不起作用。请帮助我。感谢上面的文件文本,但如果我像这样更改文件中的句子:
lebuzzdesbonsplans.com;hotmail.com;26608;828;3.11 friendcorp.fr;yahoo.fr;11343;0;0 lebuzzdesbonsplans.com;hotmail.fr;24798;876;3.53 friendcorp.fr;free.fr;9856;12;.12 Messenger.fr;free.fr;9090;11;.12 friendcorp.fr;wanadoo.fr;9283;1.01 messenger.fr;laposte.net;8107;2.02
它不起作用。请帮助我。谢谢你的回答,但我可以问你一些代码吗?我想得到
$b[2]
$b[3]
之间的减法,我声明
$total
并且我做
$total=$b[2]-$b[3]
我如何
回显函数旁边的变量
$total
??请帮我添加
$a[$b[0]['total']=$b[2];-$b[3]
那么我应该如何在foreach中显示它呢?谢谢你的回答,但我可以问你一些代码吗?我想得到
$b[2]
$b[3]
之间的减法,我声明
$total
并且我做
$total=$b[2]-$b[3]
我如何
回显函数旁边的变量
$total
??请帮我添加
$a[$b[0]['total']=$b[2];-$b[3]
那么我如何在foreach中显示它呢?