2017-01-11 2 views
0

Ich versuche, die Anzahl der positiven Werte in einer Eingabezeichenfolge zu zählen. Also, ich binZugriff auf externe Variable von einer Funktion

  • Konvertieren der Zeichenfolge Array
  • Iterate durch das Array und prüfen, ob der num positiv ist

Dies funktioniert gut, wenn ich eine foreach-Schleife verwenden.

Aber ich versuche, dies mit dem Standard array functions zu arbeiten.

$handle = fopen("php://stdin","r"); 
$positiveCount = -1; 

fscanf($handle, "%d", $nums); 

$arrayString = fgets($handle); 
$array = explode(" ", $arrayString); 

array_walk($array, function($num, &$positiveCount){ 
    if($num>0){ 
     print("In positive : {$positiveCount}\n"); 
     $positiveCount++; 
    } 
}); 

print("Total Count : {$positiveCount}"); 

Ich erwartete $ positiveCount zu der Funktion als Referenz übergeben werden und withing in erhöht.

Das ist mein Ausgang,

$ php plusMinusNotWorking.php 
4 
1 2 0 -1 
In positive : 0 
In positive : 1 
Total Count : -1 

Pass durch Verweis scheint hier nicht arbeiten . Liegt es daran, dass ich eine anonyme Funktion verwende? Meine erwartete Ausgabe ist

$ php plusMinusNotWorking.php 
4 
1 2 0 -1 
In positive : 1 
In positive : 2 
Total Count : 2 

Antwort

1

Es ist, weil Sie nicht

$positiveCount = -1; 

auf Ihre array_walk() Funktion sind vorbei.

Ich glaube, Sie

array_walk($array, function($num) use (&$positiveCount) { 
    //your code 
} 

So etwas wie dies tun müssen.

+0

Danke !. Ich habe diese Verwendung gesehen, habe aber versucht, die Dokumentation dafür herauszufinden. Diese Frage gibt auch weitere Informationen. http://stackoverflow.com/questions/6320521/use-keyword-in-functions-php –

+0

Sie sind willkommen), und ja, das ist ein sehr hilfreicher Beitrag. – SajeshBahing

Verwandte Themen