2012-12-17 111 views
1

以下二維數組存儲多個圖像的信息(1.Book包含圖像,2.包含圖像的書的作者,3.圖像的名稱,4.Image ID):檢索並顯示存儲在多維數組中的數據

$images = array(array('book_name'=>"BookA", 'author_name'=>"AuthorA", 
         'image_name'=>"ImageA", 'image_id'=>1), 
       array('book_name'=>"BookA",'author_name'=>"AuthorB", 
         'image_name'=>"ImageA", 'image_id'=>1), 
       array('book_name'=>"BookA",'author_name'=>"AuthorA", 
         'image_name'=>"ImageB", 'image_id'=>2), 
       array('book_name'=>"BookA", 'author_name'=>"AuthorB", 
         'image_name'=>"ImageB", 'image_id'=>2), 
       array('book_name'=>"BookB", 'author_name'=>"AuthorA", 
         'image_name'=>"ImageB", 'image_id'=>2)); 

一本書可以有多個作者。 作者可以與幾本書相關聯。 圖像可以包含在幾本書中。

我想創建一個HTML表具有以下的列:

  1. 書(S) - 現場列出了所有包含特定圖像的書籍
  2. 作者(S) - 現場列出了所有所有包含該特定圖像
  3. 圖片名稱的書籍的作者 - 字段包含

我目前使用下面的代碼,圖像的名稱:

<?php function transform($images) { 
    $result = array(); 
    foreach($images as $key => $image) { 
     $image_id = $image['image_id']; 
     if (!isset($result[$image_id])) { 
      $result[$image_id] = array(
           'author_name' => array(), 
           'book_name' => $image['book_name'], 
           'image_id' => $image['image_id'], 
           'image_name' => $image['image_name'] 
           );   
     }  
    $result[$image_id]['author_name'] = array_merge($result[$image_id]['author_name'],  
    array(($image['author_name']))); 
    } 
    foreach($result as $key => $data) { 
     $uniqueauthors = array_unique($result[$key]['author_name']); 
    $result[$key]['author_name'] = implode('; ', $uniqueauthors); 
    } 
    return $result; 
} 
$images = transform($images);?> 

我的HTML代碼來創建表:

<table> 
    <tr><th>Book(s)</th> 
     <th>Author(s)</th> 
     <th>Image Name</th> 
    </tr> 
    <?php foreach ($images as $image): ?> 
    <tr> 
     <td><?php htmlout($image['book_name']); ?></td> 
     <td><?php htmlout($image['author_name']); ?></td> 
     <td><?php htmlout($image['image_name']); ?></td> 
    </tr> 
    <?php endforeach; ?> 
</table> 

結果表:

Book(s)  | Author(s)  | Image Name 
BookA   AuthorA;AuthorB ImageA 
BookA   AuthorA;AuthorB ImageB 

所需的表:

Book(s)  | Author(s)  | Image Name 
BookA   AuthorA;AuthorB ImageA 
BookA;BookB  AuthorA;AuthorB ImageB 

問題: 釷是代碼正確輸出(2.)包含所述圖像的所有書籍的所有作者列表和(3.)圖像名稱。但是,它不會根據需要輸出(3.):它僅輸出包含有問題圖像的第一個book_name(BookA),而不是包含圖像的所有書籍(BookA; BookB)的列表。如何獲取一個包含3列的HTML表格(1.)列出包含所涉及圖像的所有書籍,(2)列出包含所涉及圖像的書籍的所有作者, (3.)包含有問題的圖像的名稱。 非常感謝!

回答

1

了一些調整,以您的轉換功能,看來你處理的作者卻忘了書:)

function transform($images) 
{ 
    $result = array(); 
    foreach ($images as $key => $image) 
    { 
     $image_id = $image['image_id']; 
     if (!isset($result[$image_id])) 
     { 
      $result[$image_id] = array(
       'author_name' => array(), 
       'book_name' => array(), 
       'image_id' => $image['image_id'], 
       'image_name' => $image['image_name'] 
      ); 
     } 
     $result[$image_id]['book_name'] = array_merge($result[$image_id]['book_name'], array($image['book_name'])); 
     $result[$image_id]['author_name'] = array_merge($result[$image_id]['author_name'], array($image['author_name'])); 
    } 
    foreach ($result as $key => $data) 
    { 
     $uniquebooks = array_unique($result[$key]['book_name']); 
     $result[$key]['book_name'] = implode('; ', $uniquebooks); 
     $uniqueauthors = array_unique($result[$key]['author_name']); 
     $result[$key]['author_name'] = implode('; ', $uniqueauthors); 
    } 
    return $result; 
} 

$images = transform($images); 

print_r($images); 

輸出:

Array 
(
    [1] => Array 
     (
      [author_name] => AuthorA; AuthorB 
      [book_name] => BookA 
      [image_id] => 1 
      [image_name] => ImageA 
     ) 

    [2] => Array 
     (
      [author_name] => AuthorA; AuthorB 
      [book_name] => BookA; BookB 
      [image_id] => 2 
      [image_name] => ImageB 
     ) 

) 

應在你的htmlout功能希望工作

+0

是的,我忘記了foreach循環中的書籍。謝謝戴爾,你的解決方案的作品! – user1894374