kostenloser Webspace werbefrei: lima-city


String individuell editieren PHP

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. <?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
  4. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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 :love::love::love:
  5. g****e

    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
  6. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    ggamee schrieb:
    Oder, vllt ein wenig einfacher:
    $string = "5-10-20-200-4-40-55-50";
    $newString = substr( $string , 0 , strrpos( $string , '-' ) );

    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..
    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
  7. g****e

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

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ggamee schrieb:
    Ich muss dringend mehr schlafen... Tut mir leid, ich hatte nur gelesen, du willst das letzte Entfernen.
    Du musst wirklich mehr schlafen, da der gesuchte Code wenn schon so aussehen müsste:
    <?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… ;-)
  9. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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:
    (ich hab mal gelesen, Arrays sein für PHP sehr Performancekritisch, darum möcht man vllt darauf verzichten).
    mein Webserver genug ressourcen über hat, um mit so einem kleinen arraychen zurechtkommen dürfte ;-)

    Gruss
  10. 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...
  11. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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 :-D

    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..
  12. 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....
  13. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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 :lol:

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

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    paddy-herrmy schrieb:
    **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
    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.

    Wenn du jetzt die letzten Aufrufe haben willst kannst du mit
    WHERE `userid` = '$benutzer'
    alle Datensätze für ein Profil bekommen.
  15. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    hackyourlife schrieb:
    paddy-herrmy schrieb:
    **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
    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.

    Wenn du jetzt die letzten Aufrufe haben willst kannst du mit
    WHERE `userid` = '$benutzer'
    alle Datensätze für ein Profil bekommen.


    mag sein, aber wenn ich, wie er vorschlägt mit ORDER BY date abfragen würde, setzt das pro benutzer eine eigene tabelle vorraus..
  16. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    paddy-herrmy schrieb:
    mag sein, aber wenn ich, wie er vorschlägt mit ORDER BY date abfragen würde, setzt das pro benutzer eine eigene tabelle vorraus..
    Und warum? Das Ergebnis lässt sich ja trotzdem mit
    ORDER BY
    und
    LIMIT
    sortieren und auf z.b. 5 Einträge begrenzen.

    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";
  17. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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
  18. 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...
  19. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    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
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!