【问题标题】:Foreach duplicate valueForeach 重复值
【发布时间】:2016-05-13 16:48:01
【问题描述】:

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

【问题讨论】:

  • 复制了什么值。非常不清楚您的实际问题是什么
  • 请添加所需的输出。以便我们更好地理解。
  • 我已经添加了我想要的输出
  • 我真的对输出的第二部分感到更加困惑。你在数组中有更多数据吗?请发布适当的数据。以便我们了解您真正想要实现的目标。
  • 您的结果集是否也按文件夹名称排序?

标签: php html mysql codeigniter


【解决方案1】:

我假设所需的输出就像你在第一个块中所说的那样

  **folder_name**    **file_name**   
          tep        1.jpg
                     2.jpg

您可以通过简单的方式实现这一点,您只需要检查文件夹名称是否与同一数组中的推送文件相同。

我假设你在 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 } ?>

【讨论】:

    【解决方案2】:

    我假设所需的输出就像你在第一个块中所说的那样

      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*排序结果

    【讨论】:

    • 文件名与它的一个重复。我的意思是它颠倒了
    • @JonasDulay 请说明你想要什么。编辑您的问题以反映所需的输出。
    • 一开始还可以,但是当我在文件夹中添加一个新值时,它变成了这样imgur.com/5XLanjD
    • @JonasDulay 查看我的注释并检查您查询中的问题。
    • 我不知道如何排序:(
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2014-11-03
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多