Foreach duplicate value


Foreach duplicate value

我正在开发一个文件共享系统。我的查询得到了以下结果,当我使用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        

查询似乎是正确的,但当我显示它时。它的输出如下。我认为原因是我有两个文件,这就是为什么它在循环中重复文件夹tpp。

My files    
tep folder            
tep folder
1.jpg 
2.jpg

我想问题出在我的前臂循环上。

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();

我假设所需的输出与您在第一个块中所述的一样

  **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 } ?>

我假设所需的输出与您在第一个块中所述的一样

  folder_name    file_name
  tep            1.jpg
                 2.jpg

  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*

对结果进行排序