j 'ai finalement upgradé mon serveur en 5.2.3 et mon pb concernant les références sur des tableaux a bien été résolu.
Néanmoins, il m'en reste un que je ne m'explique toujours pas et je n'ai pas trouvé de bug qui pourrait référencer ce pb.
Voila un bout de code pour reproduire le pb
$levels = array("l1","l2","l3"); // 3 niveaux
$arr2['one']['two'] = 'ORG'; // Un tableau de base
foreach($levels as $v) {
$arr[$v] = $arr2;
}
unset($arr2); // Suppression du tableau de base
echo "<pre>"; // Affiche propreprement les dump
debug_zval_dump($arr);
// Brise artificielement le refcount
$arr['l2']['one']['two'] = $arr['l2']['one']['two'];
echo "<hr>";
debug_zval_dump($arr);
foreach($levels as $level) {
// Pour chaque feuille
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr[$level]));
foreach($iterator as $leaf) {
$iterator->offSetSet($iterator->key(), $level ); // Update la feuille avec le level
}
}
echo "<hr>";
debug_zval_dump($arr);
Et la sortieIci, on a bien un refcount de 3 pour le tableau de base qui a été affecté a chq level (donc 3 fois)
Code : Tout sélectionner
array(3) refcount(2){
["l1"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(1)
}
}
["l2"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(1)
}
}
["l3"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(1)
}
}
}
Code : Tout sélectionner
array(3) refcount(2){
["l1"]=>
array(1) refcount(2){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(2)
}
}
["l2"]=>
array(1) refcount(1){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(2)
}
}
["l3"]=>
array(1) refcount(2){
["one"]=>
array(1) refcount(1){
["two"]=>
string(3) "ORG" refcount(2)
}
}
}
Code : Tout sélectionner
array(3) refcount(2){
["l1"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l3" refcount(4)
}
}
["l2"]=>
array(1) refcount(1){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l2" refcount(2)
}
}
["l3"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l3" refcount(4)
}
}
}
Code : Tout sélectionner
array(3) refcount(2){
["l1"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l1" refcount(4)
}
}
["l2"]=>
array(1) refcount(1){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l2" refcount(2)
}
}
["l3"]=>
array(1) refcount(3){
["one"]=>
array(1) refcount(1){
["two"]=>
string(2) "l3" refcount(4)
}
}
}