【问题标题】:Order this array by date modified?按修改日期排序这个数组?
【发布时间】:2011-10-30 22:19:26
【问题描述】:

我有一个 php 文件,它在我的用户目录中创建一个包含所有内容的数组,然后将该数组发送回 iPhone。

我的 php 正在创建的数组按字母顺序排列,我希望它按文件的创建日期排序..

这是我的 php 文件的样子

<?php
$username = $_GET['username'];
$path = "$username/default/";


$files = glob("{$path}/{*.jpg,*.jpeg,*.png}", GLOB_BRACE);

// output to json
echo json_encode($files);

?>

我该怎么做?

谢谢:)

【问题讨论】:

    标签: php usort filemtime


    【解决方案1】:

    usort() 与调用filemtime() 的回调一起使用...

    这是未经测试的,但我相信它会让你走上正确的道路......

    // First define a comparison function to be used as a callback
    function filetime_callback($a, $b)
    {
      if (filemtime($a) === filemtime($b)) return 0;
      return filemtime($a) < filemtime($b) ? -1 : 1; 
    }
    
    // Then sort with usort()
    usort($files, "filetime_callback");
    

    这应该先对它们进行排序。如果您希望它们是最新的,请在回调 return 三元操作中将 &lt; 更改为 &gt;

    【讨论】:

    • 我需要添加 $dirPath: global $dirPath; if (filemtime($dirPath . $a) == filemtime($dirPath . $b)) 。 . .
    【解决方案2】:

    正如 Michael Berkowski 所提到的,使用 usort() 是可行的方法,但如果这是一次性排序(即您只需要在代码中以这种方式对数组进行一次排序),则可以使用匿名函数:

    usort($files, function ($a, $b){
        if (filemtime($a) === filemtime($b)) return 0;
        return filemtime($a) < filemtime($b) ? -1 : 1; 
    });
    

    虽然没有必要,但它确实节省了函数调用。

    如果您需要多次以这种方式对文件进行排序,最好创建一个单独的命名函数。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2016-04-01
      相关资源
      最近更新 更多