2010-11-10 5 views
0

Je veux savoir à la fin combien de succès et j'ai échoué. Je voulais utiliser la fonction de tableau, mais je ne sais pas comment continuer d'ici:php - compte éléments du tableau

public function array_internal($the_string) 
$pass= Array(); 
$failed = Array(); 
    if(strstr($the_string,"Success")) 
    { 
     $pass[] = +1; 
    } 
    else 
    { 
     $failed[] = +1; 
    } 

count($pass); 

Cette étape est en cours d'exécution chaque fonction assert comme ceci:

try { 
     $this->assertEquals("off", $this->getValue("page")); 
     throw new PHPUnit_Framework_AssertionFailedError("Success"); 
    } catch (PHPUnit_Framework_AssertionFailedError $e) { 
     $this->array_internal($e->toString()); 
    } 

La fonction elle-même est ok. mon problème est seulement avec le compteur.

Merci!

Modifier J'ai essayé de faire quelque chose comme ceci:

$pass= 0; 
$failed = 0; 
public function array_internal($the_string) 

    if(strstr($the_string,"Success")) 
    { 
     $pass += 1; 
    } 
    else 
    { 
     $failed += 1; 
    } 

$pass; 

Répondre

2

Vous ne faites rien avec le tableau, sauf en comptant, alors pourquoi ne pas simplement utiliser un entier?

$pass= 0; 
$failed = 0; 


public function array_internal($the_string) 

    global $pass, $failed; 

    if(strstr($the_string,"Success")) 
    { 
     $pass += 1; 
    } 
    else 
    { 
     $failed += 1; 
    } 

} 
+0

Je pense que 'array_internal' est appelée plusieurs fois, car il n'y a pas de boucle dans la fonction. Les variables globales seraient mieux. - Je vois que vous avez mis à jour votre réponse;) – Harmen

+0

@Harmen oui j'ai pris l'initialisation, mais la question initiale était également réinitialiser à chaque fois. Je suis d'accord qu'ils devraient être globaux ou gérés d'une autre manière. – Fosco

+0

pouvez-vous s'il vous plaît m'expliquer comment faire alors les vars globaux? (et oui, 'array_internal' est appelé plusieurs fois) – Ronny

2

Pourquoi ne pas utiliser simplement des variables globales comme $pass et $fail, que vous pouvez incrémenter par $pass++ et $fail++?

1
public function array_internal($the_string) 
$pass=0; 
$failed=0; 
if (strstr($the_string,"Success")) 
{ 
    $pass += 1; 
} 
else 
{ 
    $failed += 1; 
} 
+0

J'ai essayé cela mais $ pass est 0 à la fin. – Ronny

+0

@ronny: alors vous avez une erreur dans ce 'if (strstr ($ the_string," Success ")) ' – Svisstack

1

$pass[] = +1 crée une nouvelle paire de valeurs clé du tableau $pass, et ajoute 1 à la nouvelle valeur. Ce n'est probablement pas ce que vous voulez faire. Voir d'autres réponses pour ce que vous voulez faire.

0
$pass= Array(); 
$failed = Array(); 

Crée de nouvelles instances de tableau. La valeur de retour de votre fonction array_internal sera toujours 0 ou 1. Vous n'utiliserez jamais non plus $failed.

Une fonction beaucoup plus simple serait:

public function array_internal($the_string) 
    $pass = 0; 
    if(strstr($the_string, "Success")) 
    {    
     $pass = 1; 
    } 
    return $pass; 
} 

Comme Harmen dit, vous devez utiliser un compteur int externe. Contrairement à Harmen, j'essayerais de ne pas utiliser une variable globale si possible, mais une variable de classe pour limiter sa portée.

Peut-être une variable statique d'une classe, TestClass, appelé $passes comme:

TestClass::$passes += $this->array_internal($e->toString()); 
Questions connexes