2017-07-15 10 views
0

私は、フォルダをソートしてウェブの行と列に表示するスクリプトを作成しています。それは4列でなければならず、それ以上フォルダが見つからなくなるまで続けてください。私は行と列のオブジェクトを並べ替える魔法の部分を除いてすべてを持っています。私の考えは、私は2つの変数を作成することです:$hor(列)$ver(行)し、スクリプトを作成しているオブジェクトを配置するCSSを使用します。誰にもこれをどう扱うかについてのアイデアはありますか? Javascriptがこれはこれまでのところ私のスクリプトであるため、要件にPHPで生成されたhtmlオブジェクトをソートする方法

オプションではありません。

<?php 


error_reporting(E_ALL); 
ini_set('display_errors', 1); 


$directory = '/path/to/directory'; 
$scanned = array_diff(scandir($directory), array('..', '.')); 
$count = count($scanned); 
echo $count; 

for ($i = 2; $i <= $count + 1; $i++) { 
    $x = $i - 2; 

    // Magic code that sorts into horizontal and vertical numbers 

    echo '<div id="' . $x . '" class="' . $hor . ' ' . $ver . '"><a href="/' . $scanned[ $i ] . '"><div class="inner"><p>' . $scanned[ $i ] . '</p></div></a></div>'; 
} 

?> 
+1

少なくとも、要素を行と列に分散させる方法を説明する必要があります。列の数はいくつですか?固定金額、または何かが動的に決定されるか?最初に左から右にソートされ、次に上から下に、または最初に上から下にソートされ、次に、左から右にソートされますか? – trincot

+0

はい、私は質問を編集しました – cbh1608

+0

https://www.google.com/search?q=sortable.js – mplungjan

答えて

1

私があなたに合っていれば、達成しようとしているものかもしれません。

initカウンタは、配列内のエントリを開始するループを指示し、インクリメントカウンタはループにいくつのエントリをスキップするかを指示します。いつでも、ループを追加/削除して列の数を変更し、すべてのループで増分カウンタを変更することができます。私たちが使用している$ver$horを得るために

を使用すると、(インクリメントカウンタ;テストカウンタ初期化カウンタ)のために1.

によって初期化カウンタの値をincreasする必要があるループを追加する場合initカウンタを使用して位置を計算します。

$directory = "/path/to/directory"; 
    $scanned = array_diff(scandir($directory), array("..", ".")); 
    $count = count($scanned); 

    for ($i = 2; $i <= $count + 1; $i += 4) { 
     $x = $i - 2; 
     $v = $i + 2; 
     $ver = $v/4; 
     $hor = 1; 
     echo "<div id=\"" . $x . "\" class=\"ver" . $ver . " hor" . $hor . "\"><a href=\"/" . $scanned[ $i ] . "\"><div class=\"inner\"><p>" . $scanned[ $i ] . "</p></div></a></div>"; 
    } 

    for ($i = 3; $i <= $count + 1; $i += 4) { 
     $x = $i - 2; 
     $v = $i + 1; 
     $ver = $v/4; 
     $hor = 2; 
     echo "<div id=\"" . $x . "\" class=\"ver" . $ver . " hor" . $hor . "\"><a href=\"/" . $scanned[ $i ] . "\"><div class=\"inner\"><p>" . $scanned[ $i ] . "</p></div></a></div>"; 
    } 

    for ($i = 4; $i <= $count + 1; $i += 4) { 
     $x = $i - 2; 
     $v = $i; 
     $ver = $v/4; 
     $hor = 3; 
     echo "<div id=\"" . $x . "\" class=\"ver" . $ver . " hor" . $hor . "\"><a href=\"/" . $scanned[ $i ] . "\"><div class=\"inner\"><p>" . $scanned[ $i ] . "</p></div></a></div>"; 
    } 

    for ($i = 5; $i <= $count + 1; $i += 4) { 
     $x = $i - 2; 
     $v = $i - 1; 
     $ver = $v/4; 
     $hor = 4; 
     echo "<div id=\"" . $x . "\" class=\"ver" . $ver . " hor" . $hor . "\"><a href=\"/" . $scanned[ $i ] . "\"><div class=\"inner\"><p>" . $scanned[ $i ] . "</p></div></a></div>"; 
    } 
0

使用SCANDIR();あなたのファイルを配列として返し、foreachを使ってそれらをループするディレクトリの場合は、各ファイルをテーブルのセル使用カウンタとして出力し、その行が4列であれば行を終了します。

$files=scandir($directory); 
$i=0; 
echo "<table>"; 
echo"<tr>"; 
foreach ($files as $file){ 
echo "<td>".$file."</td>"; 
$i++; 
if(($i%4)==0){ 
echo"</tr>"; 
} 
} 
if(($i%4)==3) echo "<td></td><td></td><td></td></tr>"; 
if(($i%4)==2) echo "<td></td><<td></td></tr>"; 
if(($i%4)==1) echo "<td></td></tr>"; 
echo "</table>"; 
+0

答えを説明してもらえますか? – cbh1608

関連する問題