2017-03-10 128 views
0

我有一個HTML表單,提供用戶輸入用戶/電子郵件,名字和留言。我沒有將用戶輸入寫入文本文件,並且顯示成功。排序文本文件中的所有用戶信息時遇到問題。如何在PHP中按名字排序文本文件內容?

我想通過名字對文本文件的內容進行排序。 我的TXT內容看起來象下面這樣:

AAAAAAAAAAA

CCCCCC

BBBBBBB

鮑勃 勒博 [email protected] fsdfsd

文本文件中包含用戶名的若干塊/電子郵件,名字,姓氏和評論。 我使用sort()爲了輸出升序排序,但它不工作。

有人可以幫我按照名字排序文件內容的升序嗎?

function writeText(){ 
global $filename,$fName,$lName,$acc,$comments,$input,$arr; 

echo "<br>Done. Inputs written to Guest Book.txt<br>"; 
$fileHandler=fopen($filename,"ab"); 
flock($fileHandler,LOCK_EX);//Writing lock 

fwrite($fileHandler,$input);//accept $filename 


if(file_exists($filename)){ 
    $fileHandler = fopen($filename,"r"); 

    while(!feof($fileHandler)){ 
     //read line by line 
     echo fgets($fileHandler)."<br>"; 
     echo fgetss($fileHandler,4096)."<br>"; 

    } 
    fclose($fileHandler); 

$text=file_get_contents($filename);   
$textArr=explode("\n",$text); 
foreach ($textArr as $texts) { 
    if($texts) 
     $new_arr[] = explode("\n", $texts); 
} 
function sort_arr($a, $b) 
{ 
    return strcmp($a[0], $b[0]); 
    // 0 index will be first name 
} 
usort($new_arr, "sort_arr"); 
foreach($new_arr as $v){ 
    echo implode("\n",$v)."\n"; 
} 
print_r($textArr); 
//display result 
    echo "<br>Done. Contents have been sorted<br>"; 
}else{ 
    echo "<br>File dosen't exist"; 
} 


if(empty($fName)&&empty($lName)&&empty($acc)&&empty($comments)){ 
    echo "<br>Nothing to display"; 

} 
+0

那種陣列出了什麼問題,你有什麼在這裏?你的輸入是什麼樣的?你想要的輸出是什麼樣的? – miken32

+0

我有一個HTML表單,它提供用戶輸入用戶/電子郵件,名字和註釋。我沒有將用戶輸入寫入文本文件,並且顯示成功。排序文本文件中的所有用戶信息時遇到問題。 –

回答

0

我的建議是不同意你的文件的行和列。 在寫入文件fname時,lname,acc和註釋應與\t分開。新數據將以\n分隔;

所以存儲後,這樣可以遍歷數據,strore數組,然後由您的名字

$input=$fName."\t".$lName."\t".$acc."\t".$comments."\n"; 
$filename="temp/Guest Book.txt"; 

function writeText(){ 
    global $filename,$fName,$lName,$acc,$comments,$input,$arr; 

    echo "<br>Done. Inputs written to Guest Book.txt"; 
    $fileHandler=fopen($filename,"ab"); 
    flock($fileHandler,LOCK_EX);//Writing lock 

    fwrite($fileHandler,$input);//accept $filename 
// flock($fileHandler,LOCK_UN);//Unlock 

    if(file_exists($filename)){ 
     $fileHandler = fopen($filename,"r"); 

     while(!feof($fileHandler)){ 
      //read line by line 
      echo fgets($fileHandler)."<br>"; 
      echo fgetss($fileHandler,4096)."<br>"; 

     } 
     fclose($fileHandler); 

    $text=file_get_contents($filename);   
    $textArr=explode("\n",$text); 
    foreach ($textArr as $texts) { 
     if($texts) 
      $new_arr[] = explode("\t", $texts); 
    } 

    function sort_arr($a, $b) 
    { 
     return strcmp($a[0], $b[0]); // 0 index will be first name 
    } 

    usort($new_arr, "sort_arr"); 
    //var_dump($new_arr); //display result 
    foreach($new_arr as $v){ 
     echo $v[0]." ".$v[1]." ".$v[2]." ".$v[3]."<br>"; 
     } 
     echo "<br>Done. Contents have been sorted<br>"; 
    }else{ 
     echo "<br>File dosen't exist"; 
    } 
    if(empty($fName)&&empty($lName)&&empty($acc)&&empty($comments)){ 
     echo "<br>Nothing to display"; 

    } 

} 
+0

感謝您的更正,但它不起作用。我在想,如果我可以將一個用戶信息塊作爲數組的一個元素,然後按名字排序 –

+0

我測試過這段代碼對我來說工作得很好。你得到什麼問題 –

+0

噢好吧,我明白你的意思了。但我必須按塊名稱排序,我的意思是像一個用戶的信息就像數組中的一個元素 –