You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PHP生成的列表从JSON文件获取数据

别慌,这个问题其实很好解决,咱们一步步来搞定结合JSON数据生成图片画廊无序列表的事儿:

步骤1:读取并解析JSON数据

首先得把你的images.json文件内容读出来,转成PHP能直接操作的数组,代码大概是这样:

// 读取JSON文件,注意路径要正确
$jsonFile = 'images.json';
if (!file_exists($jsonFile)) {
    die('JSON文件找不到,请检查文件路径');
}

$jsonContent = file_get_contents($jsonFile);
// 解码成关联数组(第二个参数true必须加,否则会得到对象)
$imageDetails = json_decode($jsonContent, true);

// 检查JSON是否解析正常,避免格式错误导致后续报错
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败:' . json_last_error_msg());
}
步骤2:获取FTP文件夹的图片列表

你说已经有PHP文件能列出FTP里的图片,那我们假设你已经有一个函数(比如getFtpImageFiles())能返回所有图片文件名的数组。如果还没完善,这里给个示例逻辑(你可以替换成自己的FTP操作代码):

// 示例:模拟获取FTP图片列表(实际项目换成你的ftp_connect/ftp_nlist逻辑)
function getFtpImageFiles() {
    $ftpDir = './ftp_uploads/'; // 替换成你的FTP本地映射目录或远程路径逻辑
    $files = scandir($ftpDir);
    // 过滤掉.、..,只保留常见图片格式文件
    $imageFiles = array_filter($files, function($file) use ($ftpDir) {
        $allowedExts = ['jpg', 'jpeg', 'png', 'gif'];
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        return !in_array($file, ['.', '..']) && in_array($ext, $allowedExts);
    });
    return $imageFiles;
}

$ftpImages = getFtpImageFiles();
步骤3:匹配数据并生成无序列表

现在把FTP图片和JSON里的详情对应起来,循环输出无序列表就行。这里分两种常见的JSON结构处理:

情况1:JSON以图片文件名为键(推荐结构)

如果你的images.json是这种结构:

{
    "sunset.jpg": {
        "title": "海边日落",
        "description": "傍晚时分的海边日落,天空铺满橙红色云彩"
    },
    "mountain.png": {
        "title": "雪山远景",
        "description": "冬季的雪山,覆盖着厚厚的积雪"
    }
}

那生成列表的代码可以这么写:

echo '<ul class="image-gallery">';
foreach ($ftpImages as $imageFile) {
    // 从JSON中匹配对应图片的信息,没有的话用默认值
    $imageInfo = $imageDetails[$imageFile] ?? [];
    $title = $imageInfo['title'] ?? pathinfo($imageFile, PATHINFO_FILENAME);
    $description = $imageInfo['description'] ?? '暂无描述';

    // 输出列表项,记得用htmlspecialchars转义内容防XSS
    echo '<li>';
    echo '<img src="ftp_uploads/' . htmlspecialchars($imageFile) . '" alt="' . htmlspecialchars($title) . '">';
    echo '<h3>' . htmlspecialchars($title) . '</h3>';
    echo '<p>' . htmlspecialchars($description) . '</p>';
    echo '</li>';
}
echo '</ul>';

情况2:JSON是数组形式

如果你的images.json是数组结构(每个元素包含文件名、标题、描述):

[
    {
        "filename": "sunset.jpg",
        "title": "海边日落",
        "description": "傍晚时分的海边日落"
    },
    {
        "filename": "mountain.png",
        "title": "雪山远景",
        "description": "冬季的雪山"
    }
]

那匹配逻辑要调整一下:

echo '<ul class="image-gallery">';
foreach ($ftpImages as $imageFile) {
    // 从数组中筛选出对应文件名的信息
    $matchedInfo = array_filter($imageDetails, function($item) use ($imageFile) {
        return $item['filename'] === $imageFile;
    });
    $imageInfo = $matchedInfo ? reset($matchedInfo) : [];
    
    $title = $imageInfo['title'] ?? pathinfo($imageFile, PATHINFO_FILENAME);
    $description = $imageInfo['description'] ?? '暂无描述';

    // 输出列表项(和上面一样)
    echo '<li>';
    echo '<img src="ftp_uploads/' . htmlspecialchars($imageFile) . '" alt="' . htmlspecialchars($title) . '">';
    echo '<h3>' . htmlspecialchars($title) . '</h3>';
    echo '<p>' . htmlspecialchars($description) . '</p>';
    echo '</li>';
}
echo '</ul>';
额外小提示
  • 注意<img>标签里的src路径要和你的FTP图片访问路径一致,别写错了;
  • 一定要用htmlspecialchars()转义输出内容,防止用户上传的恶意内容引发XSS攻击;
  • 如果图片或JSON数据量很大,可以考虑加个缓存机制,减少重复解析和匹配的耗时。

内容的提问来源于stack exchange,提问作者Ravager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:55