PHP - einen Wert nach dem letzten Punkt auslesen
-
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
PHP - einen Wert nach dem letzten Punkt auslesen
Hallo.
Vielleicht kann mir jemand helfen. Ich habe keinen Plan von PHP und frage ganz blöde nach.
Ich baue mir in vTiger gerade einen Workflow. Soweit...
Ich habe: 192.168.0.7 (oder auch 192.168.0.17, usw.)
Ich möchte den Wert nach dem letzten Punkt auslesen, bzw. verwenden. Also die 7 oder 17.
Und rauskommen soll: 51007, bzw. 51017 -> also 51000 PLUS die letzte ausgelesene Zahl nach dem letzten Punkt.
Geht sowas
Vielen Dank.
P.S.: Und falls das Addieren das Problem ist... dann würde mir das "Auslesen" auch reichen. Ich kann mit einem weiteren Schritt in vTiger auch dann diese Variabla addieren lassen.
Vielleicht kann mir jemand helfen. Ich habe keinen Plan von PHP und frage ganz blöde nach.
Ich baue mir in vTiger gerade einen Workflow. Soweit...
Ich habe: 192.168.0.7 (oder auch 192.168.0.17, usw.)
Ich möchte den Wert nach dem letzten Punkt auslesen, bzw. verwenden. Also die 7 oder 17.
Und rauskommen soll: 51007, bzw. 51017 -> also 51000 PLUS die letzte ausgelesene Zahl nach dem letzten Punkt.
Geht sowas
Vielen Dank.
P.S.: Und falls das Addieren das Problem ist... dann würde mir das "Auslesen" auch reichen. Ich kann mit einem weiteren Schritt in vTiger auch dann diese Variabla addieren lassen.
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Du kannst so was machen.
Ausgabe:
Aber, es gibt viele Wege ein Problem mit PHP zu lösen. Viel Spaß mit PHP.
Code: Alles auswählen
$input = "192.168.0.7";
$array = explode(".",$input);
echo $array[0]. "<br>";
echo $array[1]. "<br>";
echo $array[2]. "<br>";
echo $array[3]. "<br>";
Code: Alles auswählen
192
168
0
7
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Code: Alles auswählen
<?php
$ip = "192.168.0.17";
$arr = preg_split("/\./", $ip);
$res = 51000 + (int) $arr[3];
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Das geht in neueren PHP-Versionen auch direkt:Bullet64 hat geschrieben:19.10.2019 16:27:30Code: Alles auswählen
$input = "192.168.0.7"; $array = explode(".",$input); echo $array[0]. "<br>"; echo $array[1]. "<br>"; echo $array[2]. "<br>"; echo $array[3]. "<br>";
Code: Alles auswählen
$value = 50000 + explode(".", $ip)[3];
preg_*-Funktionen sind super maechtig, aber auch teuer. Wenn man String-Funtktionen nutzen kann, sollte man die tendenziell vorziehen.
Use ed once in a while!
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Ja, ich wollte auch eigentlich explode verwenden, da ich den Befehl aber gerade nicht im Kopf hatte, bin ich beim schnellen Suchen, bei preg_split gelandet.Meillo hat geschrieben:19.10.2019 20:47:50preg_*-Funktionen sind super maechtig, aber auch teuer. Wenn man String-Funtktionen nutzen kann, sollte man die tendenziell vorziehen.
Re: PHP - einen Wert nach dem letzten Punkt auslesen
weitere Lösung: split() zerlegt in ein Array und end() um davon das letzte Element zu wählen
Re: PHP - einen Wert nach dem letzten Punkt auslesen
split() ist in PHP5 deprecated und in PHP7 entfernt:eggy hat geschrieben:19.10.2019 22:16:49weitere Lösung: split() zerlegt in ein Array und end() um davon das letzte Element zu wählen
http://php.net/split hat geschrieben: Warning
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
* preg_split()
* explode()
* str_split()
Use ed once in a while!
Re: PHP - einen Wert nach dem letzten Punkt auslesen
ähm ups, zuviele Sprachen gleichzeitig
explode('.', $str) wäre richtig gewesen
explode('.', $str) wäre richtig gewesen
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Code: Alles auswählen
$value = 51000 + end(explode(".", $ip));
Code: Alles auswählen
Only variables should be passed by reference
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Das liegt daran, dass end() den internen Arraypointer auf das letzte Element schiebt (und zudem dieses zurueck gibt). Der interne Arraypointer eines Funktionsrueckgabewertes kann nicht geaendert werden, darum die Notice.thoerb hat geschrieben:19.10.2019 22:46:12Das funktioniert, gibt aber eine Notice:Code: Alles auswählen
$value = 51000 + end(explode(".", $ip));
Code: Alles auswählen
Only variables should be passed by reference
end() ist also nicht pure, sondern veraendert den Zustand des Argumentarrays.
Darum habe ich meine Variante (mit dem Arrayzugriff auf das Rueckgabearray) vorgeschlagen. Wahrscheinlich war meine Formulierung ``neuere PHP-Versionen'' etwas irrefuehrend. Das funktioniert seit PHP 5.4 oder so. (Meine Wahrnehmung von neu und alt weicht wohl etwas von der ueblichen Wahrnehmung ab. )
Use ed once in a while!
Re: PHP - einen Wert nach dem letzten Punkt auslesen
@Meillo: nen Keyword für sowas wie "ist eh nur temporär" gibts in PHP nicht, oder?
Bei der Suche bin ich hier drüber gestolpert:
https://stackoverflow.com/questions/463 ... -reference
Die dort vorgeschlagene Lösung mit strrchr gefällt mir auch ganz gut.
Das "@" ist wahrscheinlich keine sinnvolle Idee, aber damit wäre die Meldung auch weg .
Ka, was "kostenmässig" die günstigere Variante wäre, vermutlich der Arrayelementzugriff via [3].
Bei der Suche bin ich hier drüber gestolpert:
https://stackoverflow.com/questions/463 ... -reference
Die dort vorgeschlagene Lösung mit strrchr gefällt mir auch ganz gut.
Code: Alles auswählen
#!/usr/bin/php
<?php
$str = "192.168.1.103";
$arr = explode('.', $str);
$last = end($arr);
print($last);
print ("\n");
print(substr(strrchr($str, "."),1)) ."\n";
print(explode(".", $str)[3]) ."\n";
print(@end(explode(".", $str))) ;
?>
Ka, was "kostenmässig" die günstigere Variante wäre, vermutlich der Arrayelementzugriff via [3].
-
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Ooooh, wow, Leute. Vielen, vielen Dank!
Meine Güte...
Ich werde es später gleich testen und berichten.
Meine Güte...
Ich werde es später gleich testen und berichten.
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
Re: PHP - einen Wert nach dem letzten Punkt auslesen
Ich bin mir nicht sicher, wie du die Frage meinst. Manche Funktionen sind pure, d.h. sie erzeugen einen Rueckgabewert ohne das System drumrum zu veraendern. Andere Funktionen haben Nebeneffekte. Diese internen Arraypointer in PHP werden von verschiedenen Stellen veraendert. All diese Funktionen brauchen eine Referenz auf ein Array, das sie aendern koennen.eggy hat geschrieben:20.10.2019 07:34:20@Meillo: nen Keyword für sowas wie "ist eh nur temporär" gibts in PHP nicht, oder?
end() ist halt in erster Linie dafuer da, den internen Arraypointer zu setzen und nur nebenbei gibt es letzten Wert zurueck. Ich denke, so muss man die Situation verstehen, dann ist man weniger darueber verwundert.
Mit dem Unterdruecken von Warnungen sollte man vorsichtig sein. Aber das kann schon auch ein Mittel der Wahl sein. Ich wuerde das nicht verteufeln, aber man sollte wissen was man tut (weil moeglicherweise auch andere, sinnvolle, Fehlerfaelle der Funktion unterdrueckt werden).Das "@" ist wahrscheinlich keine sinnvolle Idee, aber damit wäre die Meldung auch weg .Code: Alles auswählen
#!/usr/bin/php <?php $str = "192.168.1.103"; $arr = explode('.', $str); $last = end($arr); print($last); print ("\n"); print(substr(strrchr($str, "."),1)) ."\n"; print(explode(".", $str)[3]) ."\n"; print(@end(explode(".", $str))) ; ?>
Wie immer wuerde ich meine Wahl in erster Linie anhand der Lesbarkeit treffen: Welche Umstetzung verstehe ich am schnellsten (und ist am meisten Mainstream (und hat keine schlimmen Fehlerquellen))? (Und bei einem groesseren Projekt natuerlich ebenso: Wie werden solche Probleme an anderen Stellen im Code geloest?)Ka, was "kostenmässig" die günstigere Variante wäre, vermutlich der Arrayelementzugriff via [3].
Use ed once in a while!