2016-12-14 1 views
0

私は、画像のIDとそのラベルのテキストと共に画像のIDを格納するCSVファイルを持っています(スプレッドシートはイメージギャラリー他)。 1.csv、2.csv、3.csvという名前の複数のCSVがあります。ループの目的で、ループカウンタを ".csv"に連結してファイルを取得するだけです。 CSVのものですが、必ずしも設定されているとは限りません。PHPで配列をソートしてファイルに戻す

ユーザーがコントロールパネルを使用してCSVを編集すると、画像のIDを変更できます。新しい画像を追加すると、そのIDも指定できます。

これは各CSV自体一つ最後

$htmlMenu .= "<tr> <th> Name/ID </th> <th> URL </th> <th> Text </th> </tr>"; 
    $file_handle = fopen($fullCSVUrl, "r"); 
    while (!feof($file_handle)) { 
     $line_of_text = fgetcsv($file_handle, 1024); 
     $htmlMenu .= "<tr> <td> $line_of_text[0] </td> <td> <a href=\"$line_of_text[1]\"> $line_of_text[1] </a> </td> <td> $line_of_text[2] </td>"; 
    } 
    $htmlMenu .= "</table>"; 

によって各ファイル1を通過するループ内に存在する次のwhileループに変換され、CSV

1,images/url/photograph.jpg,label text 
2,images/url/image2.jpg,label text 
4,images/url/apple.jpg,label text 
3,images/url/foo.jpg,label text 
5,images/url/5.jpg,label text 

の一例です、$ htmlMenuがエコーされ、個々のHTMLテーブルとして1つずつCSVごとにページが生成されます。これは$ line_of_text [0]がファイルから取得したIDであることを意味します。

可能であれば、最初の列でデータを並べ替えてからCSVに送り返し、このページにアクセスするたびにファイルをIDで効率的にソートしたいと思います。私は、CSV自体をソートするか、配列をソートしてファイルに戻して、古いデータを置き換えても構いません。

私は効果的に説明して欲しいと思っています。私は何をしたいのかを知っています。どこで、私はそれを理解できません。ご協力ありがとうございました。

PS:ソートされたテーブルを表示するには、リフレッシュする必要があることを理解しています。これは個人的な使い分けのとおりです。

答えて

1

私が理解しているところでは、最初の列でデータを注文してから、メニューを押します。

コールバック関数を使用して 'usort'関数を使用して注文することができます。このコードを試すことができます:

//This function compare the array rows 
function cmp_rows($a, $b){ 
    if ($a[0] == $b[0]) { 
     return 0; 
    } 
    return ($a[0] < $b[0]) ? -1 : 1; 
} 

$htmlMenu .= "<tr> <th> Name/ID </th> <th> URL </th> <th> Text </th> </tr>"; 

//get all the .csv files in paht $filePath 
$filePath = "/path/to/the/files"; 
$files = glob($filePath."/*.csv"); 

$date = array(); 
// Iterate each file 
if(count($files)) foreach($files as $file){ 
    if(($file_handle = fopen($fullCSVUrl, "r")!==FALSE){ 
     while (!feof($file_handle)) { 
      $data[] = fgetcsv($file_handle, 1024); 
     } 
     fclose($file_handle); 
    }else{ 
     echo "<li> Could not open file ".$file; 
    } 
} 

//Order the array using the compare function 'cmp_rows', previously defined 
usort($data,"cmp_rows"); 

if(count($data)) foreach($data as $line_of_text){ 
    $htmlMenu .= "<tr> <td> $line_of_text[0] </td> <td> <a href=\"$line_of_text[1]\"> $line_of_text[1] </a> </td> <td> $line_of_text[2] </td>"; 
} 
$htmlMenu .= "</table>"; 
+0

返信ありがとうございます。このコードは複数のファイルが存在するため、ループ内にあります。あなたのコードはデータベースをソートしますが、プリントされたすべてのデータベースはソートされていても何度も何度も何度も印刷されています。私のループ内で複数の用途をサポートするために、これをどのように変更することができますか?(私のコードのすべてが含まれています) – Jordan

+0

まず、すべてのファイルを配列に入れてから、それらの間を繰り返します。あなたはこのようなものを試すことができます:http://stackoverflow.com/questions/29608709/reading-csv-files-from-directory-and-showing-the-content-of-each-file-fails 私は答えを編集しますあなたの問題へのより良いアプローチを作る... – megavexus

関連する問題