I valori delle matrici non sono identici (ma lo sono?)

Ho due arrays. Sembrano contenere alless un identico insieme di valori, ma l'esecuzione di arrays_diff() non restituisce nulla anche se penso che dovrebbe! Questo dovrebbe essere solo un codice di routine, ma per qualche motivo non mi piace quello che ho fatto.

La cosa strana è che var_dump($queue[0]); restituisce String(167); e var_dump($videos[0]) restituisce String(168) .

Quindi, chiaramente, devono essere diversi, giusto?

echo similar_text($queue[0]), $videos[0]); restituisce 167 . Che cosa!?

Nota: questi sono solo nomi di file e non rappresentano il contenuto del file.

Array di video

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 )

Matrice di coda

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 )

Uscite

$diff = arrays_intersect($queue,$videos); print_r($diff); restituisce Array ( )

var_dump($queue[0]); restituisce la 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]); restituisce la 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]); restituisce 167 .

Ho inserito le stringhe nel count dei caratteri JavaScript, ho usato strlen (), trim () per tagliare gli spazi bianchi, ho anche calcolato manualmente ciascun carattere singolarmente. Cosa sta succedendo?

Dopo aver convertito entrambe le stringhe in forma esadecimale usando

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

, le stringhe di risultati appaiono in questo modo: http://jsfiddle.net/mgaWn/

Guardarli in quella forma mostra che la prima string contiene 5,·6·+·Extras , la seconda contiene 5,·6··+·Extrasc'è un doppio spazio prima del segno + .

HTML collassa lo spazio bianco e questa differenza diventa completamente invisibile. In generale, è una buona idea confrontare i dati il ​​più vicino ansible al formato originale, prima che qualsiasi specifica del formato di output (come le codifiche dei caratteri o questa minimizzazione degli spazi bianchi HTML) si intrometti.

C'è probabilmente un carattere che non è printingbile.

Scrivi entrambe le stringhe in un file, da PHP, in formato binario, e confronta i risultati con un editor esadecimale o simile. Basta copiare le stringhe e quindi il confronto non functionrà per alcuni casi in quanto potrebbe perdere caratteri.

Controlla se gli arrays passati a arrays_diff () sono nell'ordine corretto. Catturato me stesso poche volte su questo.