【问题标题】:List Files on Directory and Print result as JSON列出目录上的文件并将结果打印为 JSON
【发布时间】:2013-03-30 00:10:19
【问题描述】:

对不起,如果我的问题是基本的,因为我不熟悉 php 和 json。我已经创建了一个 php 文件,其中列出了我的服务器上的一个目录,并且应该将结果打印为 JSON。那么,我该怎么做呢?

这是我列出目录中文件的代码:

<?php

$dir = "picture/";

if(is_dir($dir)){

    if($dh = opendir($dir)){
        while(($file = readdir($dh)) != false){

            if($file == "." or $file == ".."){

            } else {
                echo $file."<br />";
                //echo json_encode($file);
            }
        }
    }
}

?>

感谢您的回复......

【问题讨论】:

    标签: php json


    【解决方案1】:

    也许可以试试这样?

    <?php
    
    $dir          = "picture/";
    $return_array = array();
    
    if(is_dir($dir)){
    
        if($dh = opendir($dir)){
            while(($file = readdir($dh)) != false){
    
                if($file == "." or $file == ".."){
    
                } else {
                    $return_array[] = $file; // Add the file to the array
                }
            }
        }
    
        echo json_encode($return_array);
    }
    
    ?>
    

    【讨论】:

    • yap,现在的问题是如何在其中添加每个字符串的 id ......所以也许 json 看起来像这样......? [{"key1":"value1"},{"key1":"value1"},........,{"key1":"value1"}]
    • 您可以在循环期间将其添加为键。所以你在哪里看到 $return_aray[] = $filoe;您可以将其替换为 $return_array[$key] = $file;显然,您必须更新代码以更改 $key 以反映您希望显示的键名。
    • 所以如果我想为每个打印 2 个键,可以这样表示它..? $return_array[$key1][$key2] = $file
    • 这将导致 int [{key1: {key2: value}}]。我认为您想要的可能更像 [{key1: [val1, val2, val3]},{key2: [val1, val2, val3]}]?
    • 这很简单,然后您只需插入另一个数组作为该键的值,例如 $result_array[$key1] = array($val1, $val2, $val3);
    【解决方案2】:

    您可以使用此代码命名数组并设置相同的键:

    <?php
    
    $dir = "../uploads";
    if(is_dir($dir)){
        if($dh = opendir($dir)){
            while(($file = readdir($dh)) != false){
                if($file != "." and $file != ".."){
                    $files_array[] = array('file' => $file); // Add the file to the array
                } 
            }
        }
        $return_array =array('name_array' => $files_array);
    
        exit (json_encode($return_array));
    }
    
    
    ?>
    

    【讨论】:

      【解决方案3】:

      我修改了弗朗西斯科的代码:

      <?php
      header('Content-Type: application/json');
      
      $dir          = "./"; //path
      
      $list = array(); //main array
      
      if(is_dir($dir)){
          if($dh = opendir($dir)){
              while(($file = readdir($dh)) != false){
      
                  if($file == "." or $file == ".."){
                      //...
                  } else { //create object with two fields
                      $list3 = array(
                      'file' => $file, 
                      'size' => filesize($file));
                      array_push($list, $list3);
                  }
              }
          }
      
          $return_array = array('files'=> $list);
      
          echo json_encode($return_array);
      }
      
      ?>
      

      结果:

      {
          "files": [{
                  "file": "element1.txt",
                  "size": 10
              }, {
                  "file": "element2.txt",
                  "size": 10
              }
          ]
      }
      

      【讨论】:

      • 再次设置$return_array的目的是什么?想更好地了解那里发生了什么。
      • 移除并修复
      • 感谢您的更新,我注意到它无论如何都有效,我只是想确保没有一些底层 PHP VooDoo 在工作。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2019-02-24
      • 2021-12-31
      • 2016-03-08
      相关资源
      最近更新 更多