2012-12-16 69 views
-1

可能重複:
Sorting with a modulus顯示項目垂直

這是我的代碼:

<?php 
while($fetch_cat = mysql_fetch_array($rescat)) 
    { 
     $per_cnt++; 
?> 
     <li style="margin-left:10px;"> 
      <a href="sub_cat.php?cat_id=<?php echo $fetch_cat['cat_id'];?>" 
      style="color:#431603;text-decoration:none;"><?php 
      echo stripslashes($fetch_cat['category_name']);?> 
      </a> 
     </li> 
<?php 
    } 
?> 

這是我水平是getting-字母順序輸出:

A B C 
D E F 
G H I 
J 

這是我想顯示 - 垂直按字母順序排列的:

A E H 
B F I 
C G J 
D 
+2

這是HTML和CSS,PHP不是一個問題。 –

+1

不要再使用古老且不安全的mysql_ * API,而是使用PDO和準備好的語句! – markus

+0

有關如何使用PDO的示例,請參閱http://bobby-tables.com/php.html –

回答

1

這種模式是矩陣變換。見http://www.laprbass.com/RAY_temp_balbycarr.php

<?php // RAY_temp_balbycarr.php 
error_reporting(E_ALL); 


// CONNECTION AND SELECTION VARIABLES FOR THE DATABASE 
$db_host = "localhost"; // PROBABLY THIS IS OK 
$db_name = "??";  // GET THESE FROM YOUR HOSTING COMPANY 
$db_user = "??"; 
$db_word = "??"; 


// OPEN A CONNECTION TO THE DATA BASE SERVER 
// MAN PAGE: http://php.net/manual/en/function.mysql-connect.php 
if (!$db_connection = mysql_connect("$db_host", "$db_user", "$db_word")) 
{ 
    $errmsg = mysql_errno() . ' ' . mysql_error(); 
    echo "<br/>NO DB CONNECTION: "; 
    echo "<br/> $errmsg <br/>"; 
} 

// SELECT THE MYSQL DATA BASE 
// MAN PAGE: http://php.net/manual/en/function.mysql-select-db.php 
if (!$db_sel = mysql_select_db($db_name, $db_connection)) 
{ 
    $errmsg = mysql_errno() . ' ' . mysql_error(); 
    echo "<br/>NO DB SELECTION: "; 
    echo "<br/> $errmsg <br/>"; 
    die('NO DATA BASE'); 
} 
// IF WE GOT THIS FAR WE CAN DO QUERIES 



// CREATING A TABLE 
$sql = "CREATE TEMPORARY TABLE my_table 
(
     id INT    NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     name  VARCHAR(24) NOT NULL DEFAULT '', 
     question VARCHAR(24) NOT NULL DEFAULT '', 
     answer VARCHAR(2) NOT NULL DEFAULT '' 
)" 
; 
$res = mysql_query($sql); 

// IF mysql_query() RETURNS FALSE, GET THE ERROR REASONS 
if (!$res) 
{ 
    $errmsg = mysql_errno() . ' ' . mysql_error(); 
    echo "<br/>QUERY FAIL: "; 
    echo "<br/>$sql <br/>"; 
    die($errmsg); 
} 



// LOADING IT UP WITH TEST DATA 
$sql = "INSERT INTO my_table 
(name,  question, answer) 
VALUES 
('David', 'Question1', 'A'), 
('John', 'Question1', 'B'), 
('David', 'Question2', 'B'), 
('Mary', 'Question1', 'C'), 
('John', 'Question2', 'A'), 
('David', 'Question3', 'B'), 
('Mary', 'Question2', 'A') 
" 
; 
$res = mysql_query($sql); 

// IF mysql_query() RETURNS FALSE, GET THE ERROR REASONS 
if (!$res) 
{ 
    $errmsg = mysql_errno() . ' ' . mysql_error(); 
    echo "<br/>QUERY FAIL: "; 
    echo "<br/>$sql <br/>"; 
    die($errmsg); 
} 


// GET THE COLUMN TITLES (NAMES) 
$cols = array(); 
$sql = "SELECT name FROM my_table GROUP BY name ORDER BY name"; 
$c_res = mysql_query($sql); 
while ($row = mysql_fetch_assoc($c_res)) 
{ 
    $cols[] = $row['name']; 
} 

// GET THE ROW TITLES (QUESTIONS) 
$rows = array(); 
$sql = "SELECT question FROM my_table GROUP BY question ORDER BY question"; 
$r_res = mysql_query($sql); 
while ($row = mysql_fetch_assoc($r_res)) 
{ 
    $rows[] = $row['question']; 
} 

// CREATE THE EMPTY MATRIX OF COLUMNS (NAMES) AND ROWS (QUESTIONS) 
foreach ($cols as $c) 
{ 
    foreach ($rows as $r) 
    { 
     $mat[$c][$r] = '-'; 
    } 
} 

// LOAD THE MATRIX WITH THE ANSWERS 
$sql = "SELECT name, question, answer FROM my_table"; 
$res = mysql_query($sql); 
while ($row = mysql_fetch_assoc($res)) 
{ 
    $mat[$row['name']][$row['question']] = $row['answer']; 
} 

// CREATE THE TABLE 
$out = '<table>' . PHP_EOL; 

// ADD THE COLUMN TITLES 
$out .= '<tr>'; 
$out .= '<th></th>'; 
foreach ($cols as $c) 
{ 
    $out .= '<th>' . $c . '</th>'; 
} 
$out .= '</tr>'; 
$out .= PHP_EOL; 

// ADD EACH ROW 
foreach ($rows as $r) 
{ 
    $out .= "<tr><td>$r</td>"; 
    foreach ($cols as $c) 
    { 
     $out .= '<td>' . $mat[$c][$r] . '</td>'; 
    } 
    $out .= '</tr>'; 
    $out .= PHP_EOL; 
} 

// FINISH THE TABLE 
$out .= '</table>'; 
echo $out; 

而且表結構是在這裏:

// LOADING IT UP WITH TEST DATA 
$sql = "INSERT INTO my_table 
(name,  question, answer) 
VALUES 
('David', 'Question1', 'A'), 
('John', 'Question1', 'B'), 
('David', 'Question2', 'B'), 
('Mary', 'Question1', 'C'), 
('John', 'Question2', 'A'), 
('David', 'Question3', 'B'), 
('Mary', 'Question2', 'A') 
" 
; 
+0

您正在查找的內容通常稱爲「矩陣變換」,如果我的答案有點不合適,我很抱歉。我是EE新手。上面的腳本片段在這裏實現:http://www.laprbass.com/RAY_temp_balbycarr.php –

+0

+1有趣的解決方案。 – hakre