PHP二进制函数问题


PHP inarray function issue

我有这个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
)

我使用阵列代码(_A)

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;
}
unset($files_array);

不要在循环内执行操作,或者在使用breakreturn执行此操作后立即终止循环。但不要继续循环回in_array调用,当然这会中断。

由于您的编辑将数组设置移到了函数之外,因此它不再在作用域中。使用global关键字导入,或将其作为参数传递。

在PHP.net上阅读有关变量作用域和global的更多信息。

将此行放在函数的开头:

global $files_array;

文件:https://php.net/manual/en/language.variables.scope.php-第二个例子。

或者作为参数传递给函数:

function listFolderFiles($dir, $files_array)

由于在函数内部使用$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;
}