PHP - einen Wert nach dem letzten Punkt auslesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Quickly1971 » 19.10.2019 13:15:15

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.
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.

Bullet64
Beiträge: 49
Registriert: 02.06.2017 19:57:01

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Bullet64 » 19.10.2019 16:27:30

Du kannst so was machen.

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>";
Ausgabe:

Code: Alles auswählen

192
168
0
7
Aber, es gibt viele Wege ein Problem mit PHP zu lösen. Viel Spaß mit PHP.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von thoerb » 19.10.2019 16:31:04

Code: Alles auswählen

<?php

$ip = "192.168.0.17";

$arr = preg_split("/\./", $ip);

$res = 51000 + (int) $arr[3];

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Meillo » 19.10.2019 20:47:50

Bullet64 hat geschrieben: ↑ zum Beitrag ↑
19.10.2019 16:27:30

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>";
Das geht in neueren PHP-Versionen auch direkt:

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!

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von thoerb » 19.10.2019 21:47:50

Meillo hat geschrieben: ↑ zum Beitrag ↑
19.10.2019 20:47:50
preg_*-Funktionen sind super maechtig, aber auch teuer. Wenn man String-Funtktionen nutzen kann, sollte man die tendenziell vorziehen.
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.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von eggy » 19.10.2019 22:16:49

weitere Lösung: split() zerlegt in ein Array und end() um davon das letzte Element zu wählen

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Meillo » 19.10.2019 22:24:05

eggy hat geschrieben: ↑ zum Beitrag ↑
19.10.2019 22:16:49
weitere Lösung: split() zerlegt in ein Array und end() um davon das letzte Element zu wählen
split() ist in PHP5 deprecated und in PHP7 entfernt:
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!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von eggy » 19.10.2019 22:36:29

ähm ups, zuviele Sprachen gleichzeitig :oops:
explode('.', $str) wäre richtig gewesen

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von thoerb » 19.10.2019 22:46:12

Code: Alles auswählen

$value = 51000 + end(explode(".", $ip));
Das funktioniert, gibt aber eine Notice:

Code: Alles auswählen

Only variables should be passed by reference

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Meillo » 20.10.2019 06:59:38

thoerb hat geschrieben: ↑ zum Beitrag ↑
19.10.2019 22:46:12

Code: Alles auswählen

$value = 51000 + end(explode(".", $ip));
Das funktioniert, gibt aber eine Notice:

Code: Alles auswählen

Only variables should be passed by reference
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.

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. :roll: )
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von eggy » 20.10.2019 07:34:20

@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.

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))) ;

?>
Das "@" ist wahrscheinlich keine sinnvolle Idee, aber damit wäre die Meldung auch weg :mrgreen: .
Ka, was "kostenmässig" die günstigere Variante wäre, vermutlich der Arrayelementzugriff via [3].

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Quickly1971 » 20.10.2019 09:37:10

Ooooh, wow, Leute. Vielen, vielen Dank!

Meine Güte... :hail:

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.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP - einen Wert nach dem letzten Punkt auslesen

Beitrag von Meillo » 20.10.2019 19:01:58

eggy hat geschrieben: ↑ zum Beitrag ↑
20.10.2019 07:34:20
@Meillo: nen Keyword für sowas wie "ist eh nur temporär" gibts in PHP nicht, oder?
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.

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.

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))) ;

?>
Das "@" ist wahrscheinlich keine sinnvolle Idee, aber damit wäre die Meldung auch weg :mrgreen: .
;-) 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).
Ka, was "kostenmässig" die günstigere Variante wäre, vermutlich der Arrayelementzugriff via [3].
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?)
Use ed once in a while!

Antworten