php - 写了2个函数,不明白我做错了什么
问题描述
我越来越多地练习 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>';
}
免责声明:我真的很想让这两个功能正常工作,但我已经有了一个没有任何功能的工作替代方案(非常感谢!),这是我自己改进的学习机会,任何帮助将不胜感激!
解决方案
你有几个问题。
首先,$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>';
}
推荐阅读
- docker - /bin/sh -c apk --no-cache 返回非零代码 4
- github - 将更新从 azure 推送到 github
- pentaho - pentaho CDE:如何在仪表板上链接 .prpt 文件?
- javascript - 使用多个编码时如何分离 json 解析数据?
- backbone.js - 在咖啡脚本主干代码中找到@符号和“->”和“=>”的含义
- .htaccess - 如何将此 .htaccess 杠杆浏览器缓存代码转换为 web.config 杠杆浏览器缓存代码?
- xml - 如何将我的 XML 字符串发布到 Web 服务而不是 xml 文件
- r - 将新列添加到数据框列表
- angular - 在手动重新加载页面之前,排序不适用于语言更改
- binary - 如何将二进制数 0.1011111... 转换为小数