2017-03-10 3 views
0

私はユーザーに電子メール、名字、コメントを入力するためのHTMLフォームを用意しています。私はテキストファイルにユーザー入力を書き、それは正常に表示されました。テキストファイル内のすべてのユーザー情報を並べ替えるときに問題が発生しました。PHPでテキストファイルの内容をファーストネームで並べ替えるには?

テキストファイルのコンテンツをファーストネームでソートしようとしています。 私のTXTの内容は以下のようになります。

aaaaaaaaaaa

CCCCCC

テキストファイルには、ユーザー名のいくつかのブロックが含まれてい

ボブ ルボー [email protected] fsdfsd

BBBBBBB /電子メール、名、姓、コメント。 昇順ソートを出力するために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

訂正ありがとうございますが動作しません。私は、ユーザー情報の1つのブロックを配列の要素の1つにしてからファーストネームでソートすればいいと考えています。 –

+0

私はこのコードをうまくテストしてくれました。どんな問題が起こっているのですか –

+0

ああ、私はあなたが意味するものを得ました。しかし、私はそれをブロック単位でソートする必要があります。つまり、あるユーザの情報が配列の要素のようなものであることを意味します。 –

関連する問題