2008-11-25 7 views
3

J'ai rencontré ce bug où un élément d'un tableau, si son index est la chaîne "0", est inaccessible.Est-ce un bug avec l'accès au tableau PHP?

Ce n'est pas un bug avec unserialize, car cela s'est produit dans mon code sans l'invoquer.

$arr = unserialize('a:1:{s:1:"0";i:5;}'); 
var_dump($arr["0"]); //should be 5, but is NULL 
var_dump($arr[0]); //maybe this would work? no. NULL 

Est-ce que je fais quelque chose de mal ici? Comment accéder à cet élément du tableau?

Répondre

0

En fait, le code dans vos rendements question

int(5) 
+0

Quelle version? Je peux reproduire le comportement de John –

+0

"5.2.6-2 + b1 avec Suhosin-Patch 0.9.6.2" sur debian – Draemon

1

utilisation var_dump sur la structure pour voir comment il est représenté. peut-être que cela aidera. Je faisais la même chose en Perl quand j'ai eu des problèmes comme celui-ci avec Data :: Dumper

+0

Sage conseil. Enquêter d'abord! – Draemon

+0

Je l'ai fait, mais c'est en effet un bug sur PHP <5.2.5 –

6

Oui, il semble que ce soit un bug, lié à la conversion automatique des chaînes de caractères en entiers. Plus d'informations sont disponibles ici: http://bugs.php.net/bug.php?id=43614

var_dump($arr); // => array(1) { ["0"]=> int(5) } 
$arr2["0"]=5; 
var_dump($arr2); // => array(1) { [0]=> int(5) } 
print serialize($arr2); // a:1:{i:0;i:5;} 

Il semble donc que les anciennes versions de ne fonctionnent pas PHP5 l'index de chaîne en entier conversion d'index dans unserialize.

Ce bogue a été signalé dans PHP 5.2.5, et est corrigé dans PHP 5.2.6 (voir http://www.php.net/ChangeLog-5.php#5.2.6).

+0

Ne dit pas quand il a été corrigé, mais évidemment avant la version que j'utilise :) – Draemon

+0

Winner. Merci. Maintenant, pouvons-nous changer le titre en "Est-ce un bug en PHP?" ou quelque chose le long de ces lignes –

+0

Um ... J'utilise 5.2.5, et c'est cassé. Voulez-vous dire que c'est réglé en 5.2.6? –