我有这个PHP代码
$files_array = array();
$files_array = glob('*.aria2');
$files_array = str_replace('.aria2', '', $files_array);
array_push($files_array,"processing");
如果我打印$ files_array的结果
Array
(
[0] => [LiveFish] Vanguard [AAC]
[1] => [Riycou] K-Project [MP4 AAC 720p]
[2] => processing
)
我使用in_array代码
if(!in_array($ff, $files_array))
{
listFolderFiles($dir.'/'.$ff);
}
Php给我一个错误
PHP Warning: in_array() expects parameter 2 to be array, null given
我的$ files_array变量似乎没问题,如果我使用print_r,它能够显示数组值,为什么php会给我一个错误提及参数2为空
以下是我的完整代码结构
$files_array = array();
$files_array = glob('*.aria2');
$files_array = str_replace('.aria2', '', $files_array);
array_push($files_array,"processing");
print_r($files_array);
function listFolderFiles($dir){
$ffs = scandir($dir);
$i = 0;
$list = array();
foreach ( $ffs as $ff ){
if ( $ff != '.' && $ff != '..' ){
if ( strlen($ff)>=5 ) {
$extension = array('.mkv', '.avi', '.mp4');
$file_extension = substr($ff, -4);
if ( in_array($file_extension,$extension )) {
$list[] = $ff;
echo dirname($ff) . $ff . "<br/>";
$fileName = $dir.'/'.$ff;
}
}
if( is_dir($dir.'/'.$ff) )
if(!in_array($ff, $files_array)) {
listFolderFiles($dir.'/'.$ff);
}
}
}
return $list;
}
答案 0 :(得分:1)
unset($files_array);
不要在>> 循环中执行,或在使用break
或return
执行此操作后立即终止循环。但是不要继续循环回到in_array
调用,当然会破坏。
由于您的编辑,您将数组设置为在函数外部,因此它不再在范围内。可以使用global
关键字导入它,也可以将其作为参数传递。
答案 1 :(得分:1)
将此行放在函数的开头:
global $files_array;
文档:https://php.net/manual/en/language.variables.scope.php - 第二个例子。
或作为参数传递给函数:
function listFolderFiles($dir, $files_array)
答案 2 :(得分:1)
由于您在函数内部使用$files_array
,因此它必须位于全局范围内。在变量前使用global
关键字:
global $files_array;
在功能开始时。
function listFolderFiles($dir){
global $files_array;
$ffs = scandir($dir);
$i = 0;
$list = array();
foreach ( $ffs as $ff ){
if ( $ff != '.' && $ff != '..' ){
if ( strlen($ff)>=5 ) {
$extension = array('.mkv', '.avi', '.mp4');
$file_extension = substr($ff, -4);
if ( in_array($file_extension,$extension ))
{
$list[] = $ff;
echo dirname($ff) . $ff . "<br/>";
$fileName = $dir.'/'.$ff;
}
}
if( is_dir($dir.'/'.$ff) )
if(!in_array($ff, $files_array))
{
listFolderFiles($dir.'/'.$ff);
}
}
}
return $list;
}