请在php.Guidance中迭代数组时的一个小问题

时间:2011-12-01 10:38:47

标签: php

我在目录中有几个文件。我想显示扩展名为.txt和.jpeg的所有文件名

<?php
if ($handle = opendir("/home/work/collections/utils/")) {

    while (false !== ($file = readdir($handle))) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        $actual_file=pathinfo("/etrade/home/collections/utils");
        if (($actual_file["extension"]== "txt") || 
            ($actual_file["extension"]== "jpg") ||      
            ($actual_file["extension"]== "pdf")) {
            //Require changes here.Dont know how to iterate and get the list of files 
            echo "<td>"."\n"." $actual_file['basename']."</a></td>";         
        }
    }

    closedir($handle);
}

请帮我详细说明如何迭代并获取文件列表。例如,我希望所有带有jpg扩展名的文件都在一个单独的列中,pdf文件放在一个单独的列中(因为我要在表格中显示)

2 个答案:

答案 0 :(得分:1)

看看这是否符合您的要求(已编辑):

<?php

  $ignoreFiles = array('.','..'); // Items to ignore in the directory
  $allowedExtensions = array('txt','jpg','pdf'); // File extensions to display

  $files = array();
  $max = 0;

  if ($handle = opendir("/home/work/collections/utils/")) {
    while (false !== ($file = readdir($handle))) {
      if (in_array($file, $ignoreFiles)) {
        continue; // Skip items to ignore
      }
      // A simple(ish) way of getting a files extension
      $extension = strtolower(array_pop($exploded = explode('.',$file)));
      if (in_array($extension, $allowedExtensions)) { // Check if file extension is in allow list
        $files[$extension][] = $file; // Create an array of each file type
        if (count($files[$extension]) > $max) $max = count($files[$extension]); // Store the maximum column length
      }
    }
    closedir($handle);
  }

  // Start the table
  echo "<table>\n";

  // Column headers
  echo "  <tr>\n";
  foreach ($files as $extension => $data) {
    echo "    <th>$extension</th>\n";
  }
  echo "  </tr>\n";

  // Table data
  for ($i = 0; $i < $max; $i++) {
    echo "  <tr>\n";
    foreach ($files as $data) {
      if (isset($data[$i])) {
        echo "    <td>$data[$i]</td>\n";
      } else {
        echo "    <td />\n";
      }
    }
    echo "  </tr>\n";
  }

  // End the table
  echo "</table>";

答案 1 :(得分:0)

如果您只想显示两个文件列表(不清楚您的问题中哪个部分有问题),您不能将文件名存储在数组中吗?

您似乎没有获取文件详细信息 - 您正在获取/etrade/home/collections/utils的pathinfo,但您从未向其添加文件名。

<?php
if ($handle = opendir("/home/work/collections/utils/")) {
    while (false !== ($file = readdir($handle))) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        $actual_file=pathinfo($file);

        switch ($actual_file['extension'])
        {
            case ('jpg'):
                $jpegfiles[] = $actual_file;
                break;

            case ('pdf'):
                $pdffiles[] = $actual_file;
                break;
        }
    }
    closedir($handle);
}


echo "JPG files:"
foreach($jpegfiles as $file)
{
  echo $file['basename'];
}

echo "PDF Files:"
foreach($pdffiles as $file)
{
  echo $file['basename'];
}
?>

显然你可以更聪明地使用数组,并使用多维数组并根据需要取消开关。