写了2个函数,不明白我做错了什么

时间:2019-06-17 19:06:50

标签: php

我越来越多地练习PHP,并且每天尝试做一些功能来向他们学习。

昨天我写了2个函数,但是它们完全没有用,我一直在寻找原因的帮助!

我的代码:

<?php

function getFilesAndContent($path)
{
    $data[] = $fileData;

    $folderContents = new DirectoryIterator($path);

    foreach ($folderContents as $fileInfo) {
        if ($fileInfo->isDot()) {
            continue;
        }

        $fileData = [
            'file_name' => $fileInfo->getBasename(),
        ];

        if ($fileInfo->getExtension()) {
            $fileData['contents'] = getFileContents($fileInfo->getPathname());
        }

        $data = $fileData;
    }

    return $data;
}

function getFileContents($path)
{
    $names = file_get_contents($fileInfo->getPathname());

    $names = implode("\n", $names);

    sort($names);

    $contents = '';

    foreach ($names as $name) {
        $contents += $name . ' (' . strlen($name) . ')<br>';
    }

    return $contents;
}

foreach (getFilesAndContent('.') as $data) {
    echo $data['file_name'];
    echo '<br>';
    echo $data['contents'];

    echo '<hr>';
}

免责声明:我真的很想让这2个功能正常工作,但是我已经有了一个可行的替代方法(非常感谢!),而没有任何功能,这是我自己的学习机会,可以提高自己的水平,非常感谢!

1 个答案:

答案 0 :(得分:0)

您有几个问题。

首先,$data = $fileData;应该是$data[] = $fileData;。添加[]意味着赋值将在数组中创建一个新元素,而不是覆盖整个变量。而且,当您在getFilesAndContent的开头初始化变量时,它应该是$data = [];

第二,file_get_contents($fileInfo->getPathname())应该是file_get_contents($path)$fileInfogetFilesAndContent中的变量,而不是getFileContents中的变量。

第三,implode()应该是explode()implode加入数组以创建字符串,explode()将字符串拆分为数组。

function getFilesAndContent($path)
{
    $data = [];
    $folderContents = new DirectoryIterator($path);
    foreach ($folderContents as $fileInfo) {
        if ($fileInfo->isDot()) {
            continue;
        }
        $fileData = ['file_name' => $fileInfo->getBasename(),];
        if ($fileInfo->getExtension()) {
            $fileData['contents'] = getFileContents($fileInfo->getPathname());
        }
        $data[] = $fileData;
    }
    return $data;
}

function getFileContents($path)
{
    $names = file_get_contents($path);
    $names = explode("\n", $names);
    sort($names);
    $contents = '';
    foreach ($names as $name) {
        $contents += $name . ' (' . strlen($name) . ')<br>';
    }
    return $contents;
}

foreach (getFilesAndContent('.') as $data) {
    echo $data['file_name'];
    echo '<br>';
    echo $data['contents'];
    echo '<hr>';
}