我越来越多地练习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个功能正常工作,但是我已经有了一个可行的替代方法(非常感谢!),而没有任何功能,这是我自己的学习机会,可以提高自己的水平,非常感谢!
答案 0 :(得分:0)
您有几个问题。
首先,$data = $fileData;
应该是$data[] = $fileData;
。添加[]
意味着赋值将在数组中创建一个新元素,而不是覆盖整个变量。而且,当您在getFilesAndContent
的开头初始化变量时,它应该是$data = [];
。
第二,file_get_contents($fileInfo->getPathname())
应该是file_get_contents($path)
。 $fileInfo
是getFilesAndContent
中的变量,而不是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>';
}