String individuell editieren PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
anlegen
benutzer
brauch
code
date
eigene tabelle
funktionieren
http
letzte zahl
limit
ordern
pos
profil
schlafen
session
string
url
zahl
zugriff
-
Hallo..
ich hänge wieder mal fest -_-
Ich versuche gerade etwas in PHP umzusetzen, stecke aber an folgendem Problem fest:
ich habe einen string der so aussieht:
5-10-20-200-4-40-55-50
(die Zahlen sind immer verschieden..)
jetzt möchte ich, dass bei einem Aufruf immer die letzte Zahl abgeschnitten wird (inclusive dem letzten bindestrich)
und eine neue Zahl vorne HINZUgefügt wird...
nehmen wir an die nue zahl wäre 88 dann will ich, dass der Sting So aussieht:
vorher:
5-10-20-200-4-40-55-50
nacher:
88-5-10-20-200-4-40-55
Jetzt die Schwierigkeit:
Das script solte noch überprüfen, ob die erste zahl mit der neuen identisch ist.. alo sollte dort am anfang schon 88 stehen, soll der string nichtmehr verändert werden..
Kann mir dabei jemand behilflich sein?
Beitrag zuletzt geändert: 28.9.2012 10:58:04 von paddy-herrmy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?php $string = "5-10-20-200-4-40-55-50"; $neuezahl = 88; $arr = explode("-", $string); array_pop($arr); //schickt die letzte zahl ins nirvana if($arr[0] != $neuezahl) { array_unshift($arr, $neuezahl); } $string = implode("-", $arr); ?>
ungetestet, sollte aber funktionieren.
mfg
Beitrag zuletzt geändert: 28.9.2012 11:08:06 von syberpsace -
syberpsace schrieb:
<?php $string = "5-10-20-200-4-40-55-50"; $neuezahl = 88; $arr = explode("-", $string); array_pop($arr); //schickt die letzte zahl ins nirvana if($arr[0] != $neuezahl) { array_unshift($arr, $neuezahl); } $string = implode("-", $arr); ?>
ungetestet, sollte aber funktionieren.
mfg
Suuupii.. funktioniert (mit einer kleinen änderung) einwandfrei..
-Ich wollte ja, die letzte zahl nicht abgeschnitten haben, wenn die erste stimmt.. habe dazu jetzt einfach dein:
array_pop($arr); //schickt die letzte zahl ins nirvana if($arr[0] != $neuezahl) {
geändert in:
if($arr[0] != $neuezahl) { array_pop($arr); //schickt die letzte zahl ins nirvana
So klappts einwandfrei.. ich danke dir, ohne deine Hilfe hätte ich das nicht hinbekommen
-
Oder, vllt ein wenig einfacher:
$string = "5-10-20-200-4-40-55-50"; $newString = substr( $string , 0 , strrpos( $string , '-' ) );
Sollte an sich auch funktionieren. Kurze erklärung: strrpos() sucht nach dem LETZTEN vorkommen des Zeichens und gibt entweder eine Zahl oder FALSE aus. Im Falle von FALSE würde substr einen Leeren String geben, im Falle einer Zahl würde bis zu dieser ein Substr gebildet werden. Sollte an sich auch funktionieren, und ohne Arrays auskommen (ich hab mal gelesen, Arrays sein für PHP sehr Performancekritisch, darum möcht man vllt darauf verzichten).
Vielleicht ists ja auch interessant.
Liebe Grüße -
ggamee schrieb:
An sich ganz nett, aber bei deinem beispiel fehlt, dass hinzufügen der neuen zahl am anfang, und dass eben nur, wenn die erste zahl nicht mit der hinzuzufügenden übereinstimmt..
Oder, vllt ein wenig einfacher:
$string = "5-10-20-200-4-40-55-50"; $newString = substr( $string , 0 , strrpos( $string , '-' ) );
also ist deine variante eher nutzlos für das, wass ich eig. Gefragt hatte^^
Gruss
Beitrag zuletzt geändert: 28.9.2012 15:23:37 von paddy-herrmy -
paddy-herrmy schrieb:
An sich ganz nett, aber bei deinem beispiel fehlt, dass hinzufügen der neuen zahl am anfang, und dass eben nur, wenn die erste zahl nicht mit der hinzuzufügenden übereinstimmt..
Ich muss dringend mehr schlafen... Tut mir leid, ich hatte nur gelesen, du willst das letzte Entfernen. Hast natürlich Recht. Man müsste jetzt noch einen zweiten Substring bilden, diesen mit intval() konvertieren und dann vergleichen. Also so erweitern:
$string = "5-10-20-200-4-40-55-50"; $pos = strrpos( $string , '-' ); $newString = substr( $string , 0 , $pos ); if ( $pos !== FALSE && intval( substr( $string , $pos ) ) !== $newInt ) { $newString = $newInt + '-' + $newString; }
Liebe Grüße -
ggamee schrieb:
Du musst wirklich mehr schlafen, da der gesuchte Code wenn schon so aussehen müsste:
Ich muss dringend mehr schlafen... Tut mir leid, ich hatte nur gelesen, du willst das letzte Entfernen.<?php $string = '5-10-20-200-4-40-55-50'; $newInt = 88; $pos1 = strpos($string, '-'); $pos2 = strrpos($string, '-'); $firstNumber = substr($string, 0, ($pos1 === false) ? strlen($string) : $pos1); $newString = $string; if(($pos !== false) && ($firstNumber != $newInt)) { $part = substr($string, 0, $pos2); $newString = "$newInt-$part"; } echo($newString); ?>
intval ist völlig überflüssig, und wenn am Anfang die Zahl schon steht soll der String gar nicht verändert werden… -
hackyourlife schrieb:
Du musst wirklich mehr schlafen, da der gesuchte Code wenn schon so aussehen müsste:
Zumal die Version von syberpsace Einwandfrei funktioniert, und
www.lima-city.de/board/action:jump/1083830:
mein Webserver genug ressourcen über hat, um mit so einem kleinen arraychen zurechtkommen dürfte
(ich hab mal gelesen, Arrays sein für PHP sehr Performancekritisch, darum möcht man vllt darauf verzichten).
Gruss -
paddy-herrmy schrieb:
[...] mein Webserver genug ressourcen über hat, um mit so einem kleinen arraychen zurechtkommen dürfte
Gruss
das ändert sich mit der anzahl der zugriffe...
ich bin ja echer ein FAN solcher geschichten: char* liste;
aber wenn du syberspace seine lösung nimmst, warum behälst du das array nicht? das kannst du sauber in eine session speichern... ich weiß ja nicht was du vor hast, war aber nur so ein gedanke... sind die werte mittendrin festgelegt von der dimensionierung her? sonst könnte man ganz witzige Konstruktionen bauen, die zwar hässlich, aber performant sind... -
sebulon schrieb:
das ändert sich mit der anzahl der zugriffe...
Das ist mir natürlich bewusst.. Trotzdem bleib ich der Ansicht, dass diesse Funktion meinen Webserver nicht zu sehr belasten wird
sebulon schrieb:
aber wenn du syberspace seine lösung nimmst, warum behälst du das array nicht? das kannst du sauber in eine session speichern... ich weiß ja nicht was du vor hast, war aber nur so ein gedanke... sind die werte mittendrin festgelegt von der dimensionierung her? sonst könnte man ganz witzige Konstruktionen bauen, die zwar hässlich, aber performant sind...
Für was denn? Ich will da nicht noch irgendwas anderes machen^^ Die Funktion tut genau das was sie soll.. Und mehr brauch ich nicht.. Da gibt es nichts für mich in einer Session zu speichern^^..
Zur aufklärung:
Das ganze is ein "wer hat mein Profil zuletzt besucht" ding..
die zahlen sind die id`s der benutzerprofile, die ein profil besucht haben..
-
ja ok, ich würde mir da ein Log in die DB wegschreiben und ann über ein order by date DESC limit 0, X (X für n letzte User auf profil) dann ganz einfach zugriff auf die liste haben... weil den String wirst du dir bestimmt sowieso in einer textfile ablegen... da db performanter ist, würd ich solche sachen immer über DB lösen....
-
sebulon schrieb:
ja ok, ich würde mir da ein Log in die DB wegschreiben und ann über ein order by date DESC limit 0, X (X für n letzte User auf profil) dann ganz einfach zugriff auf die liste haben... weil den String wirst du dir bestimmt sowieso in einer textfile ablegen... da db performanter ist, würd ich solche sachen immer über DB lösen....
hihi.. interressant..
Wer sagt denn dass isch das in ein Textfile leg?!? wie umständlich wär dass den?
Wenn ich doch schon schreib, dass das ID´S von Benutzeraccounts sind, ist es doch schon fast Logisch, dass ich mit datenbanken arbeite, und nicht mit textfiles
und es ist nunmal performanter einfach in der bestehenden Benutzertabelle eine Spalte mit mit dem besagtem String anzulegen,
als nur für die besuche einene eigene Tabelle zu erstellen..
Das ganze sieht So aus: Bild
**edit** mir ist grad noch aufgefallen, dass ich für deine Vorgeschlagene Methode ja quasi für jeden einzelnen Benutzer eine eigene Tabelle anlegen müsste xDD
Gruss
Beitrag zuletzt geändert: 29.9.2012 0:33:30 von paddy-herrmy -
paddy-herrmy schrieb:
Wozu? Du brauchst nur eine Tabelle, in der du jeweils die User-ID einträgst um dessen Profil es sich handelt und die ID von dem, der das Profil aufgerufen hat.
**edit** mir ist grad noch aufgefallen, dass ich für deine Vorgeschlagene Methode ja quasi für jeden einzelnen Benutzer eine eigene Tabelle anlegen müsste xDD
Wenn du jetzt die letzten Aufrufe haben willst kannst du mit
alle Datensätze für ein Profil bekommen.WHERE `userid` = '$benutzer'
-
hackyourlife schrieb:
paddy-herrmy schrieb:
Wozu? Du brauchst nur eine Tabelle, in der du jeweils die User-ID einträgst um dessen Profil es sich handelt und die ID von dem, der das Profil aufgerufen hat.
**edit** mir ist grad noch aufgefallen, dass ich für deine Vorgeschlagene Methode ja quasi für jeden einzelnen Benutzer eine eigene Tabelle anlegen müsste xDD
Wenn du jetzt die letzten Aufrufe haben willst kannst du mit
alle Datensätze für ein Profil bekommen.WHERE `userid` = '$benutzer'
mag sein, aber wenn ich, wie er vorschlägt mit ORDER BY date abfragen würde, setzt das pro benutzer eine eigene tabelle vorraus.. -
paddy-herrmy schrieb:
Und warum? Das Ergebnis lässt sich ja trotzdem mit
mag sein, aber wenn ich, wie er vorschlägt mit ORDER BY date abfragen würde, setzt das pro benutzer eine eigene tabelle vorraus..
undORDER BY
sortieren und auf z.b. 5 Einträge begrenzen.LIMIT
Also in etwa so:$benutzer = 1; // der Benutzer für den die Besucher ermittelt werden sollen $query = "SELECT `userid`, `visitor`, `date` FROM `visitors` WHERE `userid` = '$benutzer' ORDER BY `date` LIMIT 5";
-
lol.. diesse Methode wär einfach nur sinnlos und unpraktisch für meine Zwecke..
Ich sagte doch bereits, dass ich keine eigene Tabelle nur für die Besucher anlegen möchte.
Ausserdem würde die Dann ja irgenwann total überfüllen, wenn ich sie nicht regelmäsig automatisch leeren lassen würde..
Ich verstehe auch die ganze Diskussion hier nicht, da syberspace vollkommen verstanden hat, um was es mir geht, und mir eine einwandfreie Lösung geliefert hat...?
Mehr brauch ich nicht..
Gruss -
quatsch, die methode ist alles andere als sinnlos...
hier mal was zum lesen:
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29
vertrau einfach mal den leuten aus der Praxis, wir haben schon etwas mehr erfahrung als du...
was ne Zuordnungstabelle aus einer m:n verbindung ist, weißt du doch, oder?
und wenn du bereinigen willst, machst du einfach über limit 6, 100 die Übergabe an dein delete...
das wär die Saubere methode... wenn ich deine webseite abschießen will brauch ich nur mit 5 verschiedenen usern gleichzeitig requests auf dasselbe profil starten und du kommst aus deiner arrayberechnung nicht mehr raus... wär die erste Seite, die man bereits mit 5 anwendern dDoSen kann...
von daher ist dein syberspace für deine Art der Entwicklung wirklich die passende Lösung, aber dein Lösungsansatz ist anfällig für unfug machen... -
sebulon schrieb:
quatsch, die methode ist alles andere als sinnlos...
hier mal was zum lesen:
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29
vertrau einfach mal den leuten aus der Praxis, wir haben schon etwas mehr erfahrung als du...
was ne Zuordnungstabelle aus einer m:n verbindung ist, weißt du doch, oder?
und wenn du bereinigen willst, machst du einfach über limit 6, 100 die Übergabe an dein delete...
das wär die Saubere methode... wenn ich deine webseite abschießen will brauch ich nur mit 5 verschiedenen usern gleichzeitig requests auf dasselbe profil starten und du kommst aus deiner arrayberechnung nicht mehr raus... wär die erste Seite, die man bereits mit 5 anwendern dDoSen kann...
von daher ist dein syberspace für deine Art der Entwicklung wirklich die passende Lösung, aber dein Lösungsansatz ist anfällig für unfug machen...
ich belass es dabei...
Meine Frage bezog sich daruaf wie ich den String hinten abschneide und vorne was hinzufüg.. Fertig..
Ich wollt nicht von euch wiussen, wie ich alles anders Programmieren könnte.. ich will das nun mal so haben..
Für was und wie ich dass dan verwende, passt hier erstmal nicht hin..
Edit:
und ich will sehen, wie du eine Seite DDost, die ein array mit 8 variablen beinhaltet
Ihr könnt jetzt gern noch alleine darüber diskutieren, wie ihr alles anders machen würdet, ich bin hier jetzt raus..
Beitrag zuletzt geändert: 29.9.2012 11:23:34 von paddy-herrmy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage