Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php,按日期升序排序文件,标记为红色文本_Php_File_Sorting - Fatal编程技术网

Php,按日期升序排序文件,标记为红色文本

Php,按日期升序排序文件,标记为红色文本,php,file,sorting,Php,File,Sorting,问题 如何在PHP中按日期升序列出和排序文件,并标记前3行/文件(红色)?比如像这样 <div class="red">20191010-file.xlsx</div> <div class="red">20191009-file.xlsx</div> <div class="red">20191008-file.xlsx</div> 20191005-file.xlsx 20191004-file.xlsx 2019100

问题

如何在PHP中按日期升序列出和排序文件,并标记前3行/文件(红色)?比如像这样

<div class="red">20191010-file.xlsx</div>
<div class="red">20191009-file.xlsx</div>
<div class="red">20191008-file.xlsx</div>
20191005-file.xlsx
20191004-file.xlsx
20191003-file.xlsx
20191002-file.xlsx
20191001-file.xlsx

...
20191010-file.xlsx
20191009-file.xlsx
20191008-file.xlsx
20191005-file.xlsx
20191004-file.xlsx
20191003-file.xlsx
20191002-file.xlsx
20191001-file.xlsx
...
我试过了

chdir($path);
  array_multisort(array_map('filemtime', ($files = glob("*.xlsx"))), SORT_DESC, $files);
  $reallyLastModified = reset($files);
  foreach($files as $file){
    $lastModified = date('F d Y, H:i:s',filemtime($file));
    if($file == $reallyLastModified){
      echo'
        <tr>
          <div id="p1" style="display: none;">LINK/'.$file.'</div>
          <td class="file_new"><p style="color:red;">NEWEST FILE</p><a href="LINK/'.$file.'" target="_blank">'.$file.'</a>
          <td class="file_new"><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$file.'" onclick="return confirm(\'Opravdu chcete smazat '.$file.'?\')"/></button></td>
        </tr>
      ';
      }
      else{
        echo'
        <tr>
          <div id="p1" style="display: none;">LINK/'.$file.'</div>
          <td><a href="LINK/'.$file.'" target="_blank">'.$file.'</a>
          <td><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$file.'" onclick="return confirm(\'Opravdu chcete smazat '.$file.'?\')"/></button></td>
        </tr>
        ';
      }
    }
  }
chdir($path);
数组\多排序(数组\映射('filemtime',($files=glob(*.xlsx))、排序\说明,$files);
$reallyllastmodified=reset($files);
foreach($files作为$file){
$lastModified=date('FDY,H:i:s',filemtime($file));
如果($file==$reallyllastModified){
回声'
链接/'.$file'
最新文件

'; } 否则{ 回声' 链接/'.$file' '; } } }
但这仅适用于1个文件。如何为前3个文件执行此操作?或者是最简单的方法,例如通过
scandir
来实现这一点


谢谢。

对于您的代码,您的数组已按日期排序。您已经使用array_multisort对数组进行排序。您的“$files”数组按最新修改日期到最早修改日期排序。如果要使用“foreach”循环,则必须使用计数器来跟踪前3个元素

但是,如果您将循环更改为“for”循环,则不必跟踪任何内容。基本上有2个“for”循环。第一个打印前3个元素,而下一个打印其余元素。如果只有一个文件。该文件将以红色突出显示。如果有3个以上的文件,则前3个文件将以红色突出显示,而其余文件将不以红色突出显示

<?php

array_multisort(array_map('filemtime', ($files = glob("*.xlsx"))), SORT_DESC, $files);
$arrLength = count($files);

for ( $i = 0; $i < ($arrLength > 3? 3 : $arrLength); $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td class="file_new"><p style="color:red;">NEWEST FILE</p><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td class="file_new"><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';  
}

for ( $i = 3; $i < $arrLength; $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';
}

对于您的代码,您的数组已按日期排序。您已经使用array_multisort对数组进行排序。您的“$files”数组按最新修改日期到最早修改日期排序。如果要使用“foreach”循环,则必须使用计数器来跟踪前3个元素

但是,如果您将循环更改为“for”循环,则不必跟踪任何内容。基本上有2个“for”循环。第一个打印前3个元素,而下一个打印其余元素。如果只有一个文件。该文件将以红色突出显示。如果有3个以上的文件,则前3个文件将以红色突出显示,而其余文件将不以红色突出显示

<?php

array_multisort(array_map('filemtime', ($files = glob("*.xlsx"))), SORT_DESC, $files);
$arrLength = count($files);

for ( $i = 0; $i < ($arrLength > 3? 3 : $arrLength); $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td class="file_new"><p style="color:red;">NEWEST FILE</p><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td class="file_new"><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';  
}

for ( $i = 3; $i < $arrLength; $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';
}

如果文件数少于4个,那么这不会中断吗?我会在循环外设置一个count变量,在count no上,它不会中断。如果文件少于4个,则不会执行第二个循环。对于第二个循环,$i从3开始,因此如果$i不小于数组的索引量,则不会执行该循环。但是如果只有2个文件,则会有一个额外的循环。感谢您指出这一点。很抱歉。我真不敢相信我错过了。因此,对于第一个循环,如果数组的长度小于等于3,则将$i与数组的长度进行比较。否则,将$i与3进行比较。如果少于4个文件,该值不会中断吗?我会在循环外设置一个count变量,在count no上,它不会中断。如果文件少于4个,则不会执行第二个循环。对于第二个循环,$i从3开始,因此如果$i不小于数组的索引量,则不会执行该循环。但是如果只有2个文件,则会有一个额外的循环。感谢您指出这一点。很抱歉。我真不敢相信我错过了。因此,对于第一个循环,如果数组的长度小于等于3,则将$i与数组的长度进行比较。否则,你将$i与3进行比较。