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

CodeIgniter3遍历多维数组插入数据库(控制器与模型)求助

解决CodeIgniter中遍历文件夹并存入MySQL的问题

嘿,别担心!作为CodeIgniter新手加上PHP基础薄弱,遇到这种多维数组的问题太正常了,我来一步步帮你搞定~

首先,先搞清楚directory_map('./mydirectory/')返回的结构:这个函数会生成一个多维数组,文件夹名作为数组的键,对应的子文件夹或文件就存在这个键的数组里;如果是文件的话,会直接以文件名作为数组元素的值。

我们需要用递归函数来遍历这个嵌套的数组,因为子文件夹可能还有更深的层级,递归能自动处理所有层级的内容。接下来结合CodeIgniter的数据库操作,把遍历到的文件夹和文件名存入数据库。

步骤1:确认数据库表结构

确保你的表(比如叫file_system)有这两列:

  • folder_name:VARCHAR类型,用来存文件夹路径(比如mydirectory/subfolder1)
  • file_name:VARCHAR类型,用来存文件名

步骤2:在CodeIgniter控制器中写代码

下面是一个完整的示例,你可以直接放到你的控制器里:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class File_uploader extends CI_Controller {

    public function index() {
        // 加载数据库库
        $this->load->database();

        // 调用directory_map获取文件夹结构,第二个参数设为TRUE会保留完整路径
        $dir_map = directory_map('./mydirectory/', TRUE);

        // 开始递归遍历数组,初始文件夹路径设为根目录'mydirectory/'
        $this->traverse_directory($dir_map, 'mydirectory/');

        echo "所有文件和文件夹已成功存入数据库!";
    }

    // 递归遍历函数
    private function traverse_directory($directory_array, $current_folder) {
        foreach ($directory_array as $key => $value) {
            // 如果是文件夹(值是数组)
            if (is_array($value)) {
                // 拼接当前文件夹路径
                $new_folder = $current_folder . $key . '/';
                // 遍历这个子文件夹
                $this->traverse_directory($value, $new_folder);
            } else {
                // 如果是文件,准备插入数据库的数据
                $data = array(
                    'folder_name' => $current_folder,
                    'file_name' => $value
                );
                // 使用CodeIgniter的Active Record插入数据,自动防SQL注入
                $this->db->insert('file_system', $data);
            }
        }
    }
}
?>

一些重要的提醒

  • 文件夹权限:确保CodeIgniter运行的服务器用户(比如www-data)有读取./mydirectory/文件夹的权限,否则directory_map会返回空数组。
  • directory_map参数:如果不想存完整路径,可以把第二个参数设为FALSE,这样返回的数组里只有文件名/文件夹名,你需要自己拼接路径。
  • 重复数据:如果需要避免重复插入,可以在插入前先查询数据库,或者给表的folder_name和file_name加联合唯一索引。

如果还有不清楚的地方,随时问我,不用不好意思~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:56:55