PHP中的array_diff即使不重复也仅返回一个不匹配的值

时间:2018-08-14 09:48:01

标签: php arrays

在代码array_diff下运行时,仅返回一个值。但是,它应该返回两个值。我的第一个数组成立:

access.2018.08.09.log
access.2018.08.10.log
access.2018.08.12.log

我的第二个数组成立:

access.2018.08.09.log

array_diff()仅返回:access.2018.08.12.log

有人可以指导为什么会发生这种情况。

<?php
$files = scandir('C:\wamp64\www\MyLogs\logsfiles');
foreach($files as $file) {
    if($file == '.' || $file == '..') continue;

    $S1=array($file.PHP_EOL);
    print_r($S1);
}
$S2 =explode("\n", file_get_contents('uplodedregistry.txt'));
$result = array_diff_assoc($S1, $S2);

print_r($result);       
?>

1 个答案:

答案 0 :(得分:0)

您将继续覆盖$S1变量-因此,在循环结束时,它将仅包含一个元素-循环中的最后一个值。相反,请在循环之前实例化数组,然后在循环内部将其追加。

<?php
$files = scandir('C:\wamp64\www\MyLogs\logsfiles');
$S1 = array(); // Init the array here
foreach($files as $file) {
    if($file == '.' || $file == '..')
        continue;

    $S1[] = $file.PHP_EOL; // Append to $S1
}
$S2 = explode("\n", file_get_contents('uplodedregistry.txt'));
$result = array_diff($S1, $S2);

print_r($result);