function RetrieveAllPages() {
$dir = '../pages';
$root = scandir($dir);
$result = array();
foreach($root as $value){
if($value === '.' || $value === '..') {
continue;
}
if(is_file("$dir/$value")) {
$result[]="$dir/$value";
continue;
}
foreach(find_all_files("$dir/$value") as $value){
$result[]=array('filename' => $value,);
}
}
print_r ($result);
var_dump($result);
return $result;
}
<?php
//echo'<select>';
foreach (RetrieveAllPages() as $value){
//echo "<option value='".$value['rolename']."'>".$value['rolename']."</option>";
echo'<input type="checkbox" value='.$value['result'].' name='.$value['result'].'/>';
}
//echo'</select>';
?>
在PHP中获取此类错误代码在上面我有研究,无法找到适合解决方案的任何来源。任何建议或想法是适用的
UPDATE
function RetrieveAllPages() {
$result = array();
$dir = "../pages";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}
print_r ($result);
var_dump($result);
return $result;
}
结果为Array ( ) array(0) { }
答案 0 :(得分:1)
如果您不想递归列出文件,可以使用它。
function RetrieveAllPages() {
$dir = '../pages';
$root = scandir($dir);
$result = array();
foreach($root as $value){
if($value === '.' || $value === '..') {
continue;
}
if(is_file("$dir/$value")) {
$result[]="$dir/$value";
}
//Note: removed the recursive call
}
print_r ($result);
var_dump($result);
return $result;
}
//echo'<select>';
foreach (RetrieveAllPages() as $value){
//echo "<option value='".$value['rolename']."'>".$value['rolename']."</option>";
// Note $value contains the filename!!!
echo'<input type="checkbox" value='.$value.' name='.$value.'/>' ;
}
//echo'</select>';
这是另一种更短的方法!使用array_filter和anonymous function。
$all_files = array_filter(scandir('../pages'),function($v){return(!($v === '.' || $v === '..'));});
foreach ($all_files as $value){
echo'<input type="checkbox" value='.$value.' name='.$value.'/>' . $value .'<br/>';
}
答案 1 :(得分:1)
由于您定义了函数Illegal offset
的方式,您收到RetrieveAllPages()
错误。从代码中,它基本上扫描根文件夹中的文件和目录。如果它遇到目录,它会尝试查找该目录中的所有文件并将它们推送到您返回的result
数组中。
如果在打印result
数组时注意到输出,它看起来就像这样(只是一个例子):
Array ( [0] => foo.jpg [1] => bar.txt [2] => Array ( [filename] => Testfile.pdf ) )
现在您已了解函数返回的内容,让我们回到echo
语句:
foreach (RetrieveAllPages() as $value){
//Here the $value could be either string of the form root/foo etc or
echo $value; //String of file directly found in root directory
//It would be of the form of an array where you would get file names by doing something like:
echo $value[0]['filename']; //from the nested array
}
在任何情况下,您都没有在result
中创建的数组中的任何位置使用字符串偏移量RetrieveAllPages()
。您使用的唯一字符串偏移是filename
。这可能是您尝试使用这些值创建复选框时出现此错误的原因。在返回的数组中处理这两种值的方式完全取决于您。
Sidenote - 保存值的方式,您的函数很可能会返回嵌套数组。一种解决方法可能是,如果您遇到目录而不是文件,只需将字符串前缀添加到该目录中找到的文件名,而不是创建前缀为filename
的嵌套数组。它会大大简化您创建echo
复选框的HTML
语句。
就像我说的那样,实施取决于你,取决于你最终想要实现的目标。希望它能让你开始朝着正确的方向前进。