PHP in_array函数问题

时间:2014-08-26 15:34:30

标签: php

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

3 个答案:

答案 0 :(得分:1)

unset($files_array);

不要在> 循环中执行,或在使用breakreturn执行此操作后立即终止循环。但是不要继续循环回到in_array调用,当然会破坏。

由于您的编辑,您将数组设置为在函数外部,因此它不再在范围内。可以使用global关键字导入它,也可以将其作为参数传递。

Read more about variable scope and global on PHP.net

答案 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;
}