10

我有两个数组。它们似乎至少包含一组相同的值,但是 array_diff()即使我认为应该执行,也不会返回任何东西!这应该只是例行代码,但由于某种原因,它不喜欢我所做的。

奇怪的是,var_dump($queue[0]);返回String(167);var_dump($videos[0])返回String(168)

很明显,它们一定是不同的吧?

echo similar_text($queue[0]), $videos[0]);返回167。什么!?

注意:这些只是文件名,并不代表文件的内容。

视频阵列

Array ( [0] => /var/www/downloads/j2/Dexter Season 1, 2, 3, 4, 5 & 6 + Extras (Early Cuts, Audiobooks etc) DVDRip HDTV TSV/Season 3/Dexter Season 3 Episode 04 - All in the Family.avi )

队列数组

Array ( [0] => /var/www/downloads/j2/Dexter Season 1, 2, 3, 4, 5 & 6 + Extras (Early Cuts, Audiobooks etc) DVDRip HDTV TSV/Season 3/Dexter Season 3 Episode 04 - All in the Family.avi [1] => j2 )

输出

$diff = array_intersect($queue,$videos); print_r($diff); 返回 Array ( )

var_dump($queue[0]);返回string(167) "/var/www/downloads/j2/Dexter Season 1, 2, 3, 4, 5 & 6 + Extras (Early Cuts, Audiobooks etc) DVDRip HDTV TSV/Season 3/Dexter Season 3 Episode 04 - All in the Family.avi"

var_dump($videos[0]); 返回 string(168) "/var/www/downloads/j2/Dexter Season 1, 2, 3, 4, 5 & 6 + Extras (Early Cuts, Audiobooks etc) DVDRip HDTV TSV/Season 3/Dexter Season 3 Episode 04 - All in the Family.avi"

echo similar_text($queue[0], $videos[0]); 返回 167

我已经将字符串放入 JavaScript 字符计数中,我使用 strlen()、trim() 来修剪空白,我什至手动单独计算了每个字符。这是怎么回事?

4

3 回答 3

5

使用将两个字符串转换为十六进制转义形式后

var_dump(preg_replace_callback('#.#', function($m) {
  return '\\x' . dechex(ord($m[0]));
}, $input))

,结果字符串如下所示:http: //jsfiddle.net/mgaWn/

以这种形式查看它们表明第一个字符串包含5,·6·+·Extras,第二个包含5,·6··+·Extras-符号前有一个双空格+

HTML 折叠空白,这种差异变得完全不可见。在任何输出格式细节(例如字符编码或此 HTML 空白最小化)妨碍您之前,将数据尽可能接近其原始格式进行比较通常是一个好主意。

于 2012-09-20T14:38:12.777 回答
3

可能有一个不可打印的字符。

将两个字符串从 PHP 以二进制格式写入文件,然后使用十六进制编辑器或类似工具比较结果。在某些情况下,仅复制字符串然后进行比较是行不通的,因为它可能会丢失字符。

于 2012-09-20T14:01:43.607 回答
1

检查传递给 array_diff() 的数组是否顺序正确。在这件事上我被抓了好几次。

于 2012-09-20T14:12:38.870 回答