【问题标题】:How can I sort PHP globs by a variable within its elements?如何通过其元素中的变量对 PHP glob 进行排序?
【发布时间】:2019-10-21 04:11:40
【问题描述】:

我在某个目录中有一堆文件。这些文件是带有变量定义的 PHP 文件。在这些文件中有一个自定义的“日期”变量。这些日期与 PHP 文件的创建时间不匹配,而是与其他任意日期匹配。我不确定如何根据这些变量对 glob 进行排序。

到目前为止,我无法创建成功的比较函数或使用 ksort 或类似函数根据其中的变量对 glob 进行排序。

glob 找到的标准项的内容将如下所示:

<?php
$title = 'Example Title';
$info = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
$time = mktime(22,19,46,10,14,2019); //THIS IS WHAT I WOULD LIKE TO SORT BY
$datestring = date("d F, Y H:i",$time);
?>

我假设我应该能够从 glob 的每个元素中对给定的变量进行排序(例如 glob 中每个文件的“时间”变量),但我一直无法找到允许这样做的排序函数。我发现的任何排序都对数组中的键进行了排序,但这些文件本身不是数组,因此它们不兼容。

【问题讨论】:

  • 当您实际上必须阅读文件并提取复杂的表达式时,文件名列表对您没有好处。在这一点上,也许是时候意识到数据库是有意义的了。
  • 我已经能够从 foreach 循环中其他地方的文件中提取信息(例如$files = glob("*.php"); foreach($files as $item){echo $item.$time;}),但不能根据这些变量对该列表中的文件进行排序。我是 PHP 新手,所以我不知道我的文件和“数据库”的区别。
  • 附录:我的 foreach 循环有 include_once($item),我只需输入变量名即可从中引用变量(例如 $time 而不是 $item.$time)。这可能是我应该在排序中关注的内容?

标签: php sorting glob


【解决方案1】:

您需要每个文件中的 $time 变量。因此,您必须使用 include 包含循环中的每个文件,这里 include_once 是错误的。

$files = glob("yourpath/*.php");
$array = array();
foreach($files as $file){
  include $file;
  $array[$time] = $file;
}
ksort($array);

注意:

这个简单的 ksort 变体只有在每个文件中都有不同的 $time 信息时才有效。

也许会更好

$files = glob("yourpath/*.php");
$array = array();
foreach($files as $key => $file){
  include $file;
  $array[$file] = $time;
}
asort($array);

【讨论】:

  • 我想由于需要$time 变量,典型的排序函数不能满足我的目的?
  • 它是这样工作的。条件是在每个文件中 $time 也在全局范围内提供。自己试试吧。
  • 我不知道你想用它实现什么。如果你想创建类似自己版本控制系统的东西,最好把排序信息做成特殊的cmets,用file_get_contents()获取php文件的内容。
  • 我的评论是更多地询问这个解决方案而不是传统的“比较”功能,比如usort。尽管您的解决方案确实符合我的目的,但我只是对这两种方法之间的差异和优点/缺点感到好奇。
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2012-01-27
  • 2018-02-01
  • 2018-05-11
相关资源
最近更新 更多