以下二维数组存储多个图像的信息(1.包含图像的书籍,2.包含图像的书籍,3.图像名称,4.图像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表:
我目前正在使用以下代码:
<?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.)包含有问题的图像的名称。 非常感谢提前!
答案 0 :(得分: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函数中使用