如何使用函数在 php 中检索数组中的文件结构


How to retrive file structure in array in php using function

我想从 php 中的特定路径中检索这种类型的数组???如何像这个数组一样检索文件和文件夹...

    children: [
       {title: "Item 1", key: "node1"},
       {title: "Folder 2", isFolder: true, key: "node2",
           children: [
              {title: "Sub-item 2.1", key: "node2.1"},
              {title: "Sub-item 2.2", key: "node2.2"}
             ]
       },
       {title: "Item 3", key: "node3"}
      ]

我试过这个功能...

  <?php
      function getDirectory($path = '.', $level = 0) {
           $ignore = array('cgi-bin', '.', '..');
           $dh = @opendir($path);
            while (false !== ( $file = readdir($dh) )) {
              if (!in_array($file, $ignore)) {
                 if (is_dir("$path/$file")) {
                     echo '<li id="key1" class="folder expanded">' . $file;
                     echo '<ul class="folder-content">';
                     getDirectory("$path/$file", ($level + 1));
                     echo '</ul>';
                     echo '</li>';
                  }
              }
          }
      closedir($dh);
     }
  ?>

你可以试试这个函数:

function getDirectory($path = '.', $level = 1)
{
    $result = array();
    $ignore = array('nbproject', 'src', '.', '..');
    $dh = @opendir($path);
    $i = 0;
    while($file = readdir($dh))
    {
        if(!in_array($file, $ignore))
        {
            if(is_dir($path.'/'.$file))
            {
                $level++;
                $singleResult = array('title'=>$file, 'isFolder'=>true, 'children'=>$this->getDirectory($path.'/'.$file, $level), 'key'=>'node'.$level);
                $result[] = $singleResult;
            }
            else
            {
                $result[] = array('title'=>$file, 'key'=>'node'.$level.'.'.$i);
            }
        }
        $i++;
    }
    closedir($dh);
    return $result;
}

我用这个函数扫描了我的一个目录,它输出:

array
(
    0 => array
    (
        'title' => 'CHANGELOG.txt'
        'key' => 'node1.2'
    )
    1 => array
    (
        'title' => 'composer.json'
        'key' => 'node1.3'
    )
    2 => array
    (
        'title' => 'docs'
        'isFolder' => true
        'children' => array
        (
            0 => array
            (
                'title' => 'COMPUTER-FUNCTIONS.md'
                'key' => 'node2.2'
            )
            1 => array
            (
                'title' => 'CONFIGURATION.md'
                'key' => 'node2.3'
            )
            2 => array
            (
                'title' => 'CONTACT-FUNCTIONS.md'
                'key' => 'node2.4'
            )
            3 => array
            (
                'title' => 'EXCHANGE-FUNCTIONS.md'
                'key' => 'node2.5'
            )
            4 => array
            (
                'title' => 'FOLDER-FUNCTIONS.md'
                'key' => 'node2.6'
            )
            5 => array
            (
                'title' => 'GETTING-STARTED.md'
                'key' => 'node2.7'
            )
            6 => array
            (
                'title' => 'GROUP-FUNCTIONS.md'
                'key' => 'node2.8'
            )
            7 => array
            (
                'title' => 'SEARCH-FUNCTIONS.md'
                'key' => 'node2.9'
            )
            8 => array
            (
                'title' => 'UPGRADING.md'
                'key' => 'node2.10'
            )
            9 => array
            (
                'title' => 'USER-FUNCTIONS.md'
                'key' => 'node2.11'
            )
        )
        'key' => 'node2'
    )
    3 => array
    (
        'title' => 'examples'
        'isFolder' => true
        'children' => array
        (
            0 => array
            (
                'title' => 'examples.php'
                'key' => 'node3.2'
            )
            1 => array
            (
                'title' => 'groupCollection.php'
                'key' => 'node3.3'
            )
            2 => array
            (
                'title' => 'index.php'
                'key' => 'node3.4'
            )
            3 => array
            (
                'title' => 'userCollection.php'
                'key' => 'node3.5'
            )
            4 => array
            (
                'title' => 'view.html.php'
                'key' => 'node3.6'
            )
        )
        'key' => 'node3'
    )
    4 => array
    (
        'title' => 'LICENSE.txt'
        'key' => 'node3.6'
    )
    5 => array
    (
        'title' => 'phpunit.xml'
        'key' => 'node3.8'
    )
    6 => array
    (
        'title' => 'README.md'
        'key' => 'node3.9'
    )
    7 => array
    (
        'title' => 'tests'
        'isFolder' => true
        'children' => array
        (
            0 => array
            (
                'title' => 'AdldapBaseTest.php'
                'key' => 'node4.2'
            )
            1 => array
            (
                'title' => 'AdldapConstructTest.php'
                'key' => 'node4.3'
            )
            2 => array
            (
                'title' => 'AdldapLiveTest.php'
                'key' => 'node4.4'
            )
            3 => array
            (
                'title' => 'AdldapMethodTest.php'
                'key' => 'node4.5'
            )
            4 => array
            (
                'title' => 'AdldapObjectTest.php'
                'key' => 'node4.6'
            )
            5 => array
            (
                'title' => 'Classes'
                'isFolder' => true
                'children' => array
                (
                    0 => array
                    (
                        'title' => 'AdldapSearchTest.php'
                        'key' => 'node5.2'
                    )
                    1 => array
                    (
                        'title' => 'AdldapUsersTest.php'
                        'key' => 'node5.3'
                    )
                    2 => array
                    (
                        'title' => 'AdldapUtilityTest.php'
                        'key' => 'node5.4'
                    )
                )
                'key' => 'node5'
            )
            6 => array
            (
                'title' => 'ConnectionTest.php'
                'key' => 'node5.8'
            )
            7 => array
            (
                'title' => 'FunctionalTestCase.php'
                'key' => 'node5.9'
            )
            8 => array
            (
                'title' => 'Objects'
                'isFolder' => true
                'children' => array
                (
                    0 => array
                    (
                        'title' => 'AccountControlTest.php'
                        'key' => 'node6.2'
                    )
                    1 => array
                    (
                        'title' => 'ContactTest.php'
                        'key' => 'node6.3'
                    )
                    2 => array
                    (
                        'title' => 'LdapEntryTest.php'
                        'key' => 'node6.4'
                    )
                    3 => array
                    (
                        'title' => 'MailboxTest.php'
                        'key' => 'node6.5'
                    )
                    4 => array
                    (
                        'title' => 'PagintorTest.php'
                        'key' => 'node6.6'
                    )
                    5 => array
                    (
                        'title' => 'UserTest.php'
                        'key' => 'node6.7'
                    )
                )
                'key' => 'node6'
            )
        )
        'key' => 'node4'
    )
)

当然,您需要自己实现将数组转换为json,只有扫描目录并为其提供适当参数的方法。