Macht PHP einen "built-in" iterator in einer Foreach-Schleife?
Bin ich mit einer foreach-Schleife gehen Sie durch die REQUEST-array, wie ich es haben will, eine einfache Möglichkeit zu nutzen, um die ANFORDERUNG array-Schlüsseln und Werten.
Allerdings möchte ich auch haben einen numerischen index, wie oft die Schleife ausgeführt wurde, wie Schreibe ich eine Tabelle mit PHPExcel, und ich will das SetCellValue
Funktion. Ich denke, so etwas wie dieses:
foreach( $_REQUEST as $key => $value){
$prettyKeys = ucwords(preg_replace($patt_underscore," ",preg_replace($patt_CC,"_",$key)));
$prettyVals = ucwords(preg_replace($patt_underscore," ",preg_replace($patt_CC,"_",$value)));
//Replace CamelCase with Underscores, then replace the underscores with spaces and then capitalize string
//"example_badUsageOfWhatever" ==> "Example Bad Usage Of Whatever"
$myExcelSheet->getActiveSheet()->SetCellValue( "A". $built-in-foreach-loop-numerical-index ,$prettyKeys);
$myExcelSheet->getActiveSheet()->SetCellValue( "B". $built-in-foreach-loop-numerical-index ,$prettyVals);
}
Ich weiß, ich kann leicht etwas umzusetzen, wie $c = 0
außerhalb der foreach und dann einfach die Schrittweite jedes mal die Schleife ausgeführt wird, aber es ist etwas cleaner?
- In einem Wort, Nein. Wie in so ziemlich jeder Sprache, wenn Sie möchten, eine Theke, müssen Sie es selbst implementieren.
- Verwenden
for
Schleife, wenn Sie diese Funktionalität benötigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP foreach nicht über diese Funktionalität gebaut (pro-das Handbuch). Verwenden Sie eine for-Schleife ein iterator oder es selbst implementieren.
Den
for
Schleife geben Ihnen einen automatischen Zähler, aber nicht, wie Sie radeln durch Ihre$_REQUEST
assoziatives array. Dieforeach
Schleife lassen Sie radeln durch, aber ohne built-in-Schalter. Es ist ein Kompromiss, aber zumindest ist es eine sehr überschaubare ein (dauert nur 2 Zeilen code zum erstellen der Theke)!Verwenden Sie die SPL Iterator-Klasse. Ich bin sicher, dass es etwas gibt, die Sie nutzen können, für diese.
Nein, es gibt keine eingebauten iterator numerischen index. Lösen können Sie dieses problem auf andere Weise, obwohl.
Die naheliegendste Möglichkeit, dies zu tun ist mit einem einfachen
for
Schleife:Können Sie auch
foreach
mit einer counter-variable:Mit einer For-Schleife
Können Sie definitiv tun dies mit einer for-Schleife, es ist nur ein bisschen hässlich:
Erweitern ArrayIterator
Mein bevorzugter Weg wäre, zu verlängern ArrayIterator. Fügen Sie einen internen Zähler, dann überschreiben, next() und rewind() zum aktualisieren der Zähler. Der Zähler gibt die 0-basierte Schlüssel des aktuellen array-Elements:
Deine Frage ist damit beantwortet sich auch hier: Wie finde ich heraus, wie oft ein Konstrukt foreach-Schleifen in PHP, ohne die Verwendung einer "counter" - variable?
Kurz, Nein. Es gibt keinen einfacheren Weg.
Können Sie den index, der jeden Schlüssel der $_REQUEST-array:
$req_index= array_flip (array_keys($_REQUEST));
Nun müssen Sie den numerischen index des aktuellen Elements durch
$req_index[$key]
, wodurch auch die Anzahl der Iterationen der Schleife: