比较值和检查重复项

时间:2016-02-07 13:20:23

标签: php arrays

我正面临一个问题,我希望有一个输出告诉我哪些文件具有相同的inode,例如“filename1和filename2是相同的”。这将是两个inode相同,但我不知道如何应用它。我正在尝试创建一个数组,其中键是文件的名称,值是inode,但它不起作用(var_dump只是给我一个空数组)。

如果我以某种方式让数组工作,那么我猜我需要以某种方式递增它并检查两个值是否相同然后打印它们的键。

    global $hardlink;
    $hardlink = [];

    foreach (glob("*") as $filename) {
      file_info($filename);
      print_file_info();
    }

    var_dump($hardlink);
    exit(0);

    function file_info($name) {
      global $info;                
        $info[0] = $name;          // the file name
        $info[1] = filesize($name);  // file size
        $info[2] = filetype($name); // file type

        $cwd = getcwd();
        $path = "$cwd/$name";

        if(is_link($path)) {
            $link = readlink($path);
            $info[3] = "-> $link";
        } else {
            $info[3] = "No link";
        }

        $lstat = lstat($path);
        $info[4] = $lstat[1];

        $hardlink[$info[0]] = $info[4];
    }

2 个答案:

答案 0 :(得分:0)

尝试将$hardlink添加到您的函数中的全局行:

function file_info($name) {
    global $info, $hardlink;

答案 1 :(得分:0)

您的变量范围存在一般问题。这是你不应该依赖全局变量的众多原因之一。

$hardlink是函数file_info()中的局部变量,而不是全局变量,因此您所做的任何更改都不会出现在全局范围内。

为了更好地解决此问题,请删除全局声明并传递引用。

$hardlink = [];

foreach (glob("*") as $filename) {
  file_info($filename, $hardlink);
  print_file_info();
}

function file_info($name, &$hardlink) {
    $info[0] = $name;          // the file name
    $info[1] = filesize($name);  // file size
    $info[2] = filetype($name); // file type

    $cwd = getcwd();
    $path = "$cwd/$name";

    if(is_link($path)) {
        $link = readlink($path);
        $info[3] = "-> $link";
    } else {
        $info[3] = "No link";
    }

    $lstat = lstat($path);
    $info[4] = $lstat[1];

    $hardlink[$info[0]] = $info[4];
}

请注意,我已经在file_info函数的第二个参数中将$ hardlink定义为引用,前缀为&