首页 > 解决方案 > 带有数组过滤的目录列表回显

问题描述

这段代码有效:

<?php
header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo json_encode($images, JSON_UNESCAPED_UNICODE);
?>

我得到了文件夹中所有 jpg 的正确回声,如下所示:

[
    "20180515_xxxxxxx.jpg",
    "20180517_yyyyyyy.jpg",
    "20180519_zzzzzzzz.jpg"
]

但是我想对每个日期进行某些过滤(仅名称以日期开头的图像> =比今天),因为所有 jpg 文件名都以其名称开头yyyymmdd

我正在尝试这样的事情:

<?php
header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
    echo json_encode($image, JSON_UNESCAPED_UNICODE);
    }
?>

但我得到的回声就像一个由所有图像名称组成的巨大名称。我只是无法以相同的格式获得回声。

标签: php

解决方案


您正在为每个图像回显一个 JSON 字符串。

而不是这个:

foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
        echo json_encode($image, JSON_UNESCAPED_UNICODE);
}

尝试添加一个数组并收集它们。

$filteredImages = [];
foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
        $filteredImages[] = $image
}
echo json_encode($filteredImages, JSON_UNESCAPED_UNICODE);

您可以不用*在过滤器中使用,而是使用今天的日期作为文件名的一部分,以避免必须循环访问。


推荐阅读