【发布时间】:2018-05-30 17:47:58
【问题描述】:
所以我试图列出每个相册包含单独照片的相册。这类似于每个类别包含帖子的类别。 我有两个数据库表,即“相册”和“照片”。 专辑表具有列 id、album_name 和album_description。 照片表有 id、photo_is_in、photo_name 和 photo_description 列。
我使用 INNER JOIN 将相册和照片表结合起来生成下面的扁平 $albums 数组:
<?php
$albums = [
['album_id' => '1', 'photo_id' => '41', 'album_name' => 'album_1', 'album_description' => 'Album 1 description', 'photo_is_in' => 'album_1', 'photo_name' => 'photo_1.jpg', 'photo_description' => 'Photo 1 description'],
['album_id' => '1', 'photo_id' => '42', 'album_name' => 'album_1', 'album_description' => 'Album 1 description', 'photo_is_in' => 'album_1', 'photo_name' => 'photo_2.jpg', 'photo_description' => 'Photo 2 description'],
//==================
['album_id' => '2', 'photo_id' => '43', 'album_name' => 'album_2', 'album_description' => 'Album 2 description', 'photo_is_in' => 'album_2', 'photo_name' => 'photo_3.jpg', 'photo_description' => 'Photo 3 description'],
['album_id' => '2', 'photo_id' => '44', 'album_name' => 'album_2', 'album_description' => 'Album 2 description', 'photo_is_in' => 'album_2', 'photo_name' => 'photo_4.jpg', 'photo_description' => 'Photo 4 description'],
];
?>
我想把上面的 $albums 数组变成一个分层数组,如下所示:
<?php
$sameAlbums = Array(
'album_1' => Array( //comes from 'album_name' => 'album_1' in the $data array above
'album_id' => '1',
'album_description' => 'Album 1 description',
'album_1' => Array( //comes from 'photo_is_in' => 'album_1' in the $data array above
'photo_1.jpg' => Array(
'photo_id' => '41',
'photo_description' => 'Photo 1 description',
),
'photo_2.jpg' => Array(
'photo_id' => '42',
'photo_description' => 'Photo 2 description',
)
)
),
//============================================
'album_2' => Array( //comes from 'album_name' => 'album_2' in the $data array above
'album_id' => '2',
'album_description' => 'Album 2 description',
'album_2' => Array( //comes from 'phot_is_in' => 'album_2' in the $data array above
'photo_3.jpg' => Array(
'photo_id' => '43',
'photo_description' => 'Photo 3 deescription',
),
'photo_3.jpg' => Array(
'photo_id' => '44',
'photo_description' => 'Photo 4 deescription',
)
)
)
);
?>
我尝试过这样的事情,但没有按预期工作,我需要帮助:
<?php
$grouping = [];
foreach($albums as $albumName){
//Grouping data by album name
$grouping[$albumName['album_name']][] = $albumName;
}
echo "<pre>";
print_r($grouping);
?>
我觉得我的解决方案还不够,但我缺乏想法。
【问题讨论】:
-
你的解决方案有什么问题?
-
将
$grouping[$albumName['phot_is_in']] = $albumName[];更改为$grouping[$albumName['phot_is_in']][] = $albumName; -
嘿@Paul Spiegel,我需要每个主相册数组都包含相册id 和相册描述以及照片,其中每张照片都是包含photo_id、photo_description 和photo_name 等的数组。但我的解决方案只有将所有内容放在相册数组中,而每张照片都没有自己的位置
-
谢谢,我已更正您指出的语法错误。但这并没有什么不同
标签: php mysql arrays multidimensional-array hierarchical-data