2011-02-08 62 views
0

我無法將數組轉換爲正確的嵌套HTML。假設我有下面的例子中值的數組 -將數據數據嵌套到HTML

An, Author---Some Book 
Another, Author---A Book 
Another, Author---Another Book 
Be, Author---Book 1 
Be, Author---Book 2 
No, Author---Book 1 

如何把它轉換成一個有組織的HTML一樣 -

<div> 
    <div class="letter">A</div> 
    <div> 
     <div class="author">An, Author</div> 
     <div class="title">Some Book</div> 
    </div> 
    <div> 
     <div class="author">Another, Author</div> 
     <div class="title">A Book</div> 
     <div class="title">Another Book</div> 
    </div> 
<div> 
<div> 
    <div class="letter">B</div> 
    <div> 
     <div class="author">Be, Author</div> 
     <div class="title">Book 1</div> 
     <div class="title">Book 2</div> 
    </div> 
<div> 
<div> 
    <div class="letter">N</div> 
    <div> 
     <div class="author">No, Author</div> 
     <div class="title">Book 1</div> 
    </div> 
<div> 

我沒有用PHP任何麻煩,它只是我不知道如何組織數據。在將數據拉回到一起之前,將它們分成三個不同的數組(數字,作者,書籍)?但是,我如何將這些書聯繫起來(Letter-> Author-> Book)?

感謝您的任何想法。

+0

首先你需要通過一些教程如何遍歷一個數組php – 2011-02-08 05:27:57

+0

你可以print_r你的數組?你是否需要某人爲你寫一個函數來分割每一行,把它分類成字母,然後如圖所示輸出它? – Jason 2011-02-08 05:30:07

回答

2

假設您的陣列已經排序爲例:

for ($i = 0; $i < count($array); $i++) { 
    $parts = explode("---", $array[$i]); 
    $author = $parts[0]; 
    $book = $parts[1]; 
    $letter = substr($author, 0, 1); 

    if (!isset($last_author) || $last_author != $author) { 

     if ($i > 0 && $last_letter != $letter) { 
       echo "\t</div>\n"; 
       echo "</div>\n"; 
     } else if ($i > 0) { 
       echo "\t</div>\n"; 
     } 

     if (!isset($last_letter) || $last_letter != $letter) { 
      echo "<div>\n"; 
      echo "\t" . '<div class="letter">' . strtoupper($letter) . '</div>' . "\n"; 
      $last_letter = $letter; 
     } 

     echo "\t<div>\n"; 

     echo "\t\t" . '<div class="author">' . $author . '</div>' . "\n"; 
     echo "\t\t" . '<div class="title">' . $book . '</div>' . "\n"; 

     $last_author = $author; 

    } else { 
     echo "\t\t" . '<div class="title">' . $book . '</div>' . "\n"; 
    } 

} 

if (count($array) > 0) echo "\t</div>\n</div>"; 

從樣本陣列輸出:

<div> 
     <div class="letter">A</div> 
     <div> 
       <div class="author">An, Author</div> 
       <div class="title">Some Book</div> 
     </div> 
     <div> 
       <div class="author">Another, Author</div> 
       <div class="title">A Book</div> 
       <div class="title">Another Book</div> 
     </div> 
</div> 
<div> 
     <div class="letter">B</div> 
     <div> 
       <div class="author">Be, Author</div> 
       <div class="title">Book 1</div> 
       <div class="title">Book 2</div> 
     </div> 
</div> 
<div> 
     <div class="letter">N</div> 
     <div> 
       <div class="author">No, Author</div> 
       <div class="title">Book 1</div> 
     </div> 
</div> 
0

也可以產生一個多維數組,這可能需要更少的代碼來呈現:

$new = array(); 

for ($i = 0; $i < count($array); $i++) { 
    $parts = explode("---", $array[$i]); 
    $author = $parts[0]; 
    $book = $parts[1]; 
    $letter = substr($author, 0, 1); 

    $new[$letter][$author][] = $book; 
} 

foreach ($new as $letter => $authors) { 

    foreach ($authors as $author => $books) { 

     foreach ($books as $book) { 

     } 

    } 

} 
0

你已經g那裏沒有div湯,但是你解析你的數組。

嘗試使用列表輸出一些有意義的和語義的東西。