【发布时间】:2012-09-20 13:42:43
【问题描述】:
我有两个数组。它们似乎包含至少一组相同的值,但执行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() 来修剪空白,我什至还手动单独计算了每个字符。怎么回事?
【问题讨论】:
-
你知道 PHP 类型转换的疯狂吗?如果没有,请小心。有时它们很难识别。
-
其中一个可能包含不可打印的字符。将它们都放入十六进制编辑器以检查它们的全部内容。
-
你检查过行尾吗? \n vs \r\n?
-
你能说明在通过
var_dump(preg_replace_callback('#.#', function($m) { return '\\x' . dechex(ord($m[0])); }, $input))运行两个字符串后会发生什么吗?只是为了确保我们看到与您正在测试的完全相同的字节序列,并且不涉及字符编码。 -
我已将代码中的空格替换为
·以突出显示问题。第一个字符串包含5,·6·+·Extras,第二个字符串包含5,·6··+·Extras- + 符号前有一个双空格。 HTML 会折叠空白并使其变得不可见,这也是我建议转储原始输入而不是依赖复制粘贴输出的原因之一。