2010-11-20 7 views
0

Je suis face à une situation très étrange qui a à voir avec le Warning: Cannot use a scalar value as an array and memory leak.PHP - Problème avec la valeur scalaire et fuite de mémoire

Le script est très simple et je ne peux pas comprendre le problème.

code

$variants=array();         
if($text) 
{ 
    $v=explode(",",$text); 
    if(is_array($v) && sizeof($v)>0) 
    { 
     foreach($v as $i=>$part) 
     {          
     $tmp=explode(":",$part); 
      list($thekey,$thevalue)=$tmp; 
     //$variants=array(); 
     echo "<div>TYPE==".gettype($variants)."</div>"; 
     echo $variants[$tmp[0]]=$tmp[1];  
     } 
    } 
} 

Si je lance le code ci-dessus comme seul support fonctionne très bien. Mais quand le mettre dans mon cadre comme une petite partie se comporte très étrange. Je suis un Warning: Cannot use a scalar value as an array et afin de le résoudre, j'ai ajouté

$variants=array(); 

sur la première ligne. Lors de l'exécution du script, le gettype renvoie ��� la première fois et après cela retourne un entier.

Si je commente $variants=array(); juste avant le gettype, cela fonctionne. Mais bien sûr, je ne comprends pas tout le tableau, seulement le dernier retour d'enregistrement.

J'analyse mon code pour découvrir que les variables que j'utilise sont déclarées avant même que je change tous les noms de variables en stupides mais pas de chance.

En essayant de déboguer et de régler le code où les temps que lors de l'exécution du script au lieu de voir quelque chose dans l'écran, le navigateur télécharger le script à la place et d'autres fois j'ai eu des fuites de mémoire. Est-ce que quelqu'un peut indiquer où ou quoi chercher, ou le déboguer et le résoudre?

Répondre

0

Problème résolu

Avant exécuter le code i appelai une fonction

$obj->draw($$id) 

qui a été l'origine du problème

La solution

$value=$$id;  
$obj->draw($value) 

Je ne sais pas pourquoi cela pourrait causer le problème.

Si quelqu'un a une théorie s'il vous plaît le poster.

+0

Qu'est-ce qui est contenu dans $ id? – methodin

+0

Exemple @methodin $ id = "text1" et $ value ont la valeur de $ text1 – ntan

+0

Est-ce que dessiner définit la variable comme un pointeur? Aussi, êtes-vous assuré que la valeur if $ id ne pointe pas vers un tableau ou quelque chose de ce genre? Cette erreur se produit généralement lorsque vous utilisez un type primitif en tant que tableau. $ a = 2; $ a ['blah'] = 'test'; – methodin