2010-11-09 5 views
0

Quelqu'un peut-il me aider à comprendre pourquoi je reçois une erreur de syntaxe avec cette fonction:PHP: erreur de syntaxe aide attendue;

function removeFromArray(&$array, $key){ 
     foreach($array as $j=>$i){ 
      if($i == $key){ 
       $array = array_values(unset($array[$j])); //error on this line says expected ; 
       return true; 
       break; 
      } 
     } 
} 

Toute aide la plus appréciée!

Jonesy

+0

L'erreur est différente: * erreur d'analyse: erreur de syntaxe, T_UNSET inattendue, expecting ')' * –

+0

serait agréable de voir le message d'erreur exact ... – oezi

+2

'return true' _et_' break'? Cela n'a aucun sens pour moi. – jwueller

Répondre

4

Enlever array_values. Il semble que vous voulez juste supprimer une valeur et unset fait déjà le travail:

function removeFromArray(&$array, $key){ 
    foreach($array as $j=>$i){ 
     if($i == $key){ 
      unset($array[$j]); 
      return true; 
     } 
    } 
} 

More about unset.

Demo


Side note:

  • Le code après une return n'est pas exécuté plus, donc break est inutile.
  • $key est un nom de variable trompeuse ici. Mieux serait $value.

Mise à jour: Si vous voulez ré-indexation les valeurs du tableau (dans le cas où vous avez un tableau numérique), vous devez le faire en deux étapes (comme unset ne retourne pas valeur):

unset($array[$j]); 
$array = array_values($array); 

Demo

+0

Je vais ajouter ce petit exemple: http://codepad.org/AXX7g8rb – Shikiryu

2

Vous essayez d'utiliser la fonction unset à l'intérieur array_values? Qu'attendez-vous exactement ici?

Vous devriez pouvoir utiliser: unset ($ array [$ j]);

Comme vous avez passé le tableau par référence, cela devrait suffire à le supprimer. Pas besoin de jouer avec des valeurs de tableau.

2

Le problème est l'unset. array_values ​​attend un tableau en tant que paramètre, mais unset n'a aucune valeur de retour.

1

Je vois ce que vous essayez de faire, je vous suggère d'utiliser ce lieu:

function removeFromArray(&$array, $key){ 
     foreach($array as $j=>$i){ 
      if($i == $key){ 
       unset($array[$j]); 
      } 
     } 
} 

Vous n'avez réellement besoin de rien retourner. unset est une fonction vide.

0

MHS ne retourne rien:

void unset (mixed $var [, mixed $var [, mixed $... ]])