Php 比较值并检查重复项

Php 比较值并检查重复项,php,arrays,Php,Arrays,我面临一个问题,我希望有一个输出告诉我哪些文件具有相同的inode,例如“filename1和filename2是相同的”。如果两个inode是相同的,这将是相同的,但是我不知道如何应用它。我目前正在尝试创建一个数组,其中键是文件名,值是inode,但它不起作用(var_dump只是给了我一个空数组) 如果我以某种方式让数组工作,那么我猜我需要以某种方式递增数组,检查两个值是否相同,然后打印它们的键 global $hardlink; $hardlink = []; f

我面临一个问题,我希望有一个输出告诉我哪些文件具有相同的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];
    }

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

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

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

$hardlink
是函数文件_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定义为一个引用,在它前面加了一个有效的
&

,非常感谢。如果可能的话,你能建议我如何检查这两个文件索引节点并打印出相同值的键吗?类似数组的东西?因此,我可以输出“这些文件拥有相同的索引节点:filename1,filename2”@Xylus,这超出了问题的范围,如果您无法理解,请打开一个新问题。PHP手册中有很多示例,但我希望您也能阅读并理解我的答案。如果你想写出好的代码,你将完全避免使用全局代码。@Devon再次感谢你。我将查看PHP手册,并尝试自己解决这个问题。