Ich schreibe einen SQL-Abfrageersteller mit einigen Parametern. In Java ist es sehr einfach, das letzte Element eines Arrays aus der for-Schleife heraus zu erkennen, indem Sie einfach die aktuelle Array-Position mit der Array-Länge überprüfen.
for(int i=0; i< arr.length;i++){
boolean isLastElem = i== (arr.length -1) ? true : false;
}
In PHP haben sie nicht ganzzahlige Indizes, um auf Arrays zuzugreifen. Sie müssen also mit einer foreach-Schleife über ein Array iterieren. Dies wird problematisch, wenn Sie eine Entscheidung treffen müssen (in meinem Fall das Anhängen oder / und Parameter beim Erstellen einer Abfrage).
Ich bin sicher, dass es dafür einen Standard geben muss.
Wie löst man das in PHP?
Antworten:
Es hört sich so an, als ob Sie so etwas wollen:
Davon abgesehen müssen Sie nicht über ein "Array" iterieren, das
foreach
in PHP verwendet wird.quelle
$numItems = count($arr)
Trick ist nicht erforderlich und verringert die Lesbarkeit - in PHP gibt es keine Leistungseinbußen für den Zugriff auf count ($ arr) jedes Mal. Der Grund dafür ist, dass die Anzahl der Elemente intern als spezielles Feld im Array-Header gespeichert und nicht im laufenden Betrieb berechnet wird. Dieser Trick stammt aus anderen Sprachen (C, Java ?, ...).Sie können den Wert des letzten Schlüssels des Arrays mithilfe von ermitteln
end(array_keys($array))
und mit dem aktuellen Schlüssel vergleichen:quelle
$lastKey = array_search(end($array), $array);
warum so kompliziert?
Dies fügt hinter jedem Wert außer dem letzten einen Wert hinzu!
quelle
Wenn toEnd 0 erreicht, bedeutet dies, dass es sich um die letzte Iteration der Schleife handelt.
Der letzte Wert ist nach der Schleife noch verfügbar. Wenn Sie ihn also nach der Schleife nur für weitere Aufgaben verwenden möchten, ist dies besser:
Wenn Sie den letzten Wert nicht als spezielle Innenschleife behandeln möchten. Dies sollte schneller sein, wenn Sie große Arrays haben. (Wenn Sie das Array nach der Schleife innerhalb desselben Bereichs wiederverwenden, müssen Sie zuerst das Array "kopieren").
Und um Ihre ursprüngliche Frage zu beantworten "in meinem Fall Anhängen oder / und Parameter beim Erstellen der Abfrage"; Dadurch werden alle Werte durchlaufen und dann zu einer Zeichenfolge mit "und" zwischen ihnen zusammengefügt, jedoch nicht vor dem ersten Wert oder nach dem letzten Wert:
quelle
$lastValue = array_pop($array);
Danke dir.Es gibt bereits viele Antworten, aber es lohnt sich auch, sich mit Iteratoren zu befassen, zumal nach einem Standardweg gefragt wurde:
Möglicherweise finden Sie etwas, das auch in anderen Fällen flexibler funktioniert.
quelle
i=0;
und++i;
wirkten in einer Skriptsprache wie PHP immer hackisch.Eine Möglichkeit könnte darin bestehen, festzustellen, ob der Iterator dies getan hat
next
. Wenn dem Iterator kein nächster zugeordnet ist, bedeutet dies, dass Sie sich in der letzten Schleife befinden.quelle
Wenn Ihr Array also eindeutige Array-Werte hat, ist es trivial, die letzte Iteration zu bestimmen:
Wie Sie sehen, funktioniert dies, wenn das letzte Element nur einmal im Array erscheint, andernfalls erhalten Sie einen Fehlalarm. In diesem Fall müssen Sie nicht die Schlüssel vergleichen (die mit Sicherheit eindeutig sind).
Beachten Sie auch den strengen Coparision-Operator, der in diesem Fall sehr wichtig ist.
quelle
Angenommen, Sie haben das Array in einer Variablen gespeichert ...
quelle
um das erste und letzte Element aus jedem Array zu erhalten
quelle
Sie können diese Methode weiterhin mit assoziativen Arrays verwenden:
quelle
Wenn Sie für jedes Element etwas tun müssen, außer für das erste oder das letzte, und nur wenn das Array mehr als ein Element enthält, bevorzuge ich die folgende Lösung.
Ich weiß, dass es oben viele Lösungen gibt, die Monate / ein Jahr vor meinen veröffentlicht wurden, aber dies ist etwas, das ich für ziemlich elegant halte. Die Prüfung jeder Schleife ist auch eine boolesche Prüfung im Gegensatz zu einer numerischen Prüfung "i = (count-1)", die möglicherweise weniger Overhead ermöglicht.
Die Struktur der Schleife mag sich unangenehm anfühlen, aber Sie können sie mit der Reihenfolge von thead (Anfang), tfoot (Ende), tbody (aktuell) in HTML-Tabellen-Tags vergleichen.
Wenn Sie beispielsweise in Bezug auf die Webentwicklung jedem Element mit Ausnahme des letzten in einer ungeordneten Liste (ul) einen unteren Rand hinzufügen möchten, können Sie stattdessen jedem Element mit Ausnahme des ersten (CSS :) einen oberen Rand hinzufügen. Das erste Kind, das von IE7 + und Firefox / Webkit unterstützt wird, unterstützt diese Logik, während das letzte Kind von IE7 nicht unterstützt wird.
Sie können die Variable $ first auch für jede verschachtelte Schleife wiederverwenden, und die Dinge funktionieren einwandfrei, da jede Schleife $ first während des ersten Prozesses der ersten Iteration falsch macht (sodass Unterbrechungen / Ausnahmen keine Probleme verursachen). .
Beispielausgabe:
quelle
Dies sollte der einfache Weg sein, um das letzte Element zu finden:
Referenz: Link
quelle
Ich habe das starke Gefühl, dass das OP an der Wurzel dieses "XY-Problems" nur
implode()
funktionieren wollte .quelle
Da Ihre Absicht, das EOF-Array zu finden, nur für den Kleber ist. Machen Sie sich mit der folgenden Taktik vertraut. Sie müssen den EOF nicht benötigen:
o / p:
quelle
Wie wäre es mit "Ende"? http://php.net/manual/en/function.end.php
quelle
Es hört sich so an, als ob Sie so etwas wollen:
quelle
Fügen Sie nach dem letzten Wert kein Komma hinzu:
Das Array:
Die Funktion:
Das Ergebnis:
Lorem, Ipsum, Dolor, sitzen, amet
quelle
Sie können zählen ().
oder wenn Sie NUR das letzte Element suchen, können Sie end () verwenden.
gibt nur das letzte Element zurück.
und wie sich herausstellt, können Sie PHP-Arrays nach Ganzzahlen indizieren. Es ist vollkommen zufrieden mit
quelle
$a = array(0=>'A', 2=>'B', 'aaa'=>'C')
. Was bekommen Sie, wenn Sie darauf zugreifen$a[count($a)-1]
?Sie könnten auch so etwas tun:
quelle
Ich mag das Folgende, da ich finde, dass es ziemlich ordentlich ist. Nehmen wir an, wir erstellen eine Zeichenfolge mit Trennzeichen zwischen allen Elementen: z. B. a, b, c
quelle
Referenz
quelle
Hier ist eine andere Möglichkeit, wie Sie es tun können:
quelle
Wenn ich Sie verstehe, müssen Sie nur das Array umkehren und das letzte Element mit einem Pop-Befehl abrufen:
quelle
Sie können dies auch versuchen, um Ihre Abfrage zu stellen ... hier mit INSERT angezeigt
quelle
Bei Skripten zur Generierung von SQL-Abfragen oder bei Skripten, die eine andere Aktion für das erste oder letzte Element ausführen, ist es viel schneller (fast doppelt so schnell), unnötige Variablenprüfungen zu vermeiden.
Die aktuell akzeptierte Lösung verwendet eine Schleife und eine Prüfung innerhalb der Schleife, die bei jeder einzelnen Wiederholung durchgeführt wird. Der richtige (schnelle) Weg, dies zu tun, ist der folgende:
Ein kleiner hausgemachter Benchmark zeigte Folgendes:
Test1: 100000 Läufe von Model Morg
Zeit: 1869.3430423737 Millisekunden
Test2: 100000 Modellläufe, wenn zuletzt
Zeit: 3235.6359958649 Millisekunden
quelle
Ein anderer Weg besteht darin, sich das vorherige Ergebnis des Schleifenzyklus zu merken und dieses als Endergebnis zu verwenden:
quelle
Ich persönlich verwende diese Art von Konstruktion, die eine einfache Verwendung mit HTML-Elementen ul und ul ermöglicht: Ändern Sie einfach die Gleichheit für eine andere Eigenschaft ...
Das Array kann keine falschen Elemente enthalten, sondern alle anderen Elemente, die in den falschen Booleschen Wert umgewandelt werden.
quelle
Sie können den letzten Index direkt erhalten, indem Sie:
$numItems = count($arr);
echo $arr[$numItems-1];
quelle
quelle
Hier ist meine Lösung: Ermitteln Sie einfach die Anzahl Ihres Arrays minus 1 (da sie bei 0 beginnen).
quelle