我正在研究文件共享系统。我的查询得到以下结果,当我使用print_r()
时,我得到了所需的数据,但问题是我不知道如何将其显示为特定的格式
我的数据库架构..
table folder
ID folder_name path
1 tep dulay
table files
ID file_name path
1 1.jpg dulay
2 2.jpg dulay
所需结果必须与dropbox.com类似
My files
tep folder
1.jpg
2.jpg
查询似乎是正确的,但是当我显示它时。输出如下。我认为原因是我有2个文件,这就是为什么它重复循环内的文件夹tpp。
My files
tep folder
tep folder
1.jpg
2.jpg
我认为问题出在我的foreach循环中。
PHP代码..
<table class="table table-hover">
<th>Folder NAME</th>
<th>FILES</th>
<?php
foreach($my_files as $key )
{
?>
<tr>
<td><?php echo $key->folder_name?></td>
<td><a href="<?php echo base_url()?>filesharing/<?php echo $key->path?>/<?php echo $key->file_name?>" download="<?php echo $key->file_name;?>"><?php echo $key->file_name?></a></td>
</tr>
<?php
}
?>
</table>
我的查询
$data['my_files'] = $this->db->select('folders.folder_name,files.file_name,files.owner,files.path')->from('folders')->join('files','files.path=folders.path','left outer')->where('folders.path',$url)->get()->result();
答案 0 :(得分:1)
我假设所需的输出与您在第一个块中所述的相同
**folder_name** **file_name**
tep 1.jpg
2.jpg
您可以通过简单的方式实现此目的,您只需检查folder_name是否与同一阵列中的推送文件相同。
我假设你在mysql响应中有这个对象数组。
$mysql_response = Array (
[0] => stdClass Object (
[folder_name] => tep
[file_name] => 1.jpg
[owner] => dulay
[path] => dulay )
[1] => stdClass Object (
[folder_name] => tep
[file_name] => 2.jpg
[owner] => dulay
[path] => dulay )
);
PHP代码实现:
<?php
$filefolders = array();
foreach($mysql_response as $key => $fileObject){
$filefolders[$fileObject->folder_name][] = $fileObject->file_name;
}
?>
HTML文件夹列表和每个文件夹中的所有文件。
<table>
<tr><th>Folder Name</th><th>File Name</th></tr>
<?php foreach($filefolders as $folder => $file){ ?>
<tr>
<td><?php echo $folder; ?></td>
<td><?php echo $file; ?></td>
</tr>
<?php } ?>
答案 1 :(得分:0)
我假设所需的输出与您在第一个块中所述的相同
folder_name file_name
tep 1.jpg
2.jpg
OR
folder_name file_name
tep 1.jpg
jonnas
尝试使用此代码,它会跟踪重复的文件夹和文件,以便此类文件夹和文件的名称只显示一次。
<?php
$prevFolder=null;
$prevFile=null;
foreach($my_files as $key )
{
echo '<tr>';
if($key->folder_name!=$prevFolder){
echo '<td>'.$key->folder_name.'</td>';
$prevFolder=$key->folder_name;
}
else{
echo '<td></td>';
}
if($key->file_name!=$prevFile){
echo '<td><a href="'.base_url().'filesharing/'.$key->path.'/'.$key->file_name.'" download="'.$key->file_name.'">'.$key->file_name.'</a></td>';
$prevFile=$key->file_name;
}
else{
echo '<td></td>';
}
?>
</tr>
<?php
}
?>
注意:始终实现正确的输出。建议结果按file_name或folder_name *
排序