Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] eine zahl im array ersetzen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] eine zahl im array ersetzen

    Hallo,

    bin mal wieder am verzweifeln. Egal ob preg_replace oder str_replace ich bekomme es einfach nicht hin.

    Im String habe ich folgendes:

    $test = "A1 A2 A3 A4 A5 A11 A12 A13 A14 A15";

    Die A1 soll nun durch A100 ersetzt werden, die A2 durch A101 usw.

    Jetzt ersetzt mir aber beides auch die A11. Es kommt A1001 raus. Diese soll aber erst später duch z.B. A110 ersezt werden.

    Gegoogelt habe ich das ganze schon mehrmals, aber es gibt immer nur Beispiele für Buchstaben oder Zahlen unter 10.

    Vielen Dank schon mal für einen Tip.


  • #2
    Deine Problembeschreibung ist unvollständig und unsauber: Du zeigst uns kein Array, sondern einen String. Was ist denn nun gemeint? Außerdem fehlt dein aktueller Ansatz. Oder erwartest du, dass du hier direkt eine Lösung, in Form eines Codeschnipsels, für dein Problem erhälst?

    Gruß
    http://hallophp.de

    Kommentar


    • #3
      Ich will nix fertiges. Wäre Nett, wenn es einen anderen Befehl zum ersetzen gibt, das man mir diesen nennen könnte.

      Ich möchte vereinfacht aus einer 1 eine 100 machen. Und aus einer 100 eine z.B. 70. Aber oben genannte befehle machen aus der 100 eine 10000.

      PHP-Code:
      $text "A1 A2 A3 A4 A5 A11 A12 A13 A14 A15";

      $a "I1";
      $b "A100";

      $text str_replace($a,$b,$text); 
      Und sorry, sollte natürlich String sein.

      Kommentar


      • #4
        Der Schnipsel passt nicht zur Beschreibung! Was sollen wir also damit anfangen?

        Aber oben genannte befehle machen aus der 100 eine 10000.
        Warum zeigst du uns diesen Code nicht einfach?
        http://hallophp.de

        Kommentar


        • #5
          A1 steckt halt auch in A11 drin...

          Ersetze ERST A11, danach A1
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            im endeffekt ist das mein code, da ich das ja testen möchte.

            PHP-Code:
            $text "A1 A2 A3 A4 A5 A11 A12 A13 A14 A15";

            $a "A1";
            $b "A100";

            $text str_replace($a,$b,$text); 
            ich hatte hier die I durch A ersetzt, der optik wegen, hatte eins vergessen.

            ich muss leider bei A1 anfangen, da später verschiedene strings geändert werden sollen. manche gehen bis A10000.

            Kommentar


            • #7
              Wenn du nur die 1 in A1 ersetzen willst, die in A10 aber nicht - dann solltest du kein simples Suchen-Ersetzen (str_replace) nutzen, sondern reguläre Ausdrücke. Und für die musst du dann halt ein entsprechendes Muster definieren - bspw. eins, das verlangt, dass nach dem A1 noch ein Leerzeichen kommen muss, damit es ersetzt wird.

              Kommentar


              • #8
                genau das wars was ich brauchte, einen kleinen denkanstoss. das mit dem leerzeichen war gut. besten dank.

                Kommentar


                • #9
                  was auch möglich wäre:

                  1. explode auf Leerzeichen
                  2. foreach auf alle Elemente als Referenz(!)
                  3. substr ab der zweiten Stelle und erste Stelle ebenfalls in Variable schreiben falls diese variieren kann
                  4. Dann auf das ergebnis des substr +99 addieren
                  5. zurückschreiben mit erster gespeicherter Stelle da referenz kein Problem


                  Code gibts heute nit
                  "My software never has bugs, it just develops random features."
                  "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                  Kommentar


                  • #10
                    Zitat von Paul.Schramenko Beitrag anzeigen
                    Code gibts heute nit
                    Doch, da ich das gerade mal ausprobiert hatte bevor du (Paul) geantwortet hast - allerdings in starr und ohne Referenzen:
                    PHP-Code:
                    foreach(explode(' '$input) as $val)
                    {
                        
                    $outputTmp[] = 'A' . (substr($val1) + 99);
                    }
                    $output implode(' '$outputTmp); 
                    Das war nämlich auch mein einfachster Lösungsansatz...


                    EDIT:
                    Das geht statt mit foreach auch mit for-Schleifen (ich suchte gerade nach einer komplizierten Lösung ):
                    PHP-Code:
                    /* split string into array of numbers, using lambda function - thus requires PHP 5.3 */
                    $outputTmp array_map(function($value) { return substr($value1); }, explode(' '$input));

                    $output '';
                    $newCountStart 99;
                    for(
                    $j 1$j $outputTmp[count($outputTmp)-1]; $j++)
                    {
                        if(
                    in_array($j$outputTmp))
                        {
                            if(
                    $j 1)
                            {
                                
                    $output .= ' ';
                            }
                            
                    $output .= 'A' . ($newCountStart $j);
                        }

                    Je grösser der Dachschaden, desto schöner der Ausblick zum Himmel. - [WIKI]Karlheinz Deschner[/WIKI]

                    Kommentar


                    • #11
                      meins ist kürzer :P

                      PHP-Code:
                      $text "A1 A2 A3 A4 A5 A11 A12 A13 A14 A15";
                      $text explode(' '$text);

                      foreach (
                      $text as $key => &$value) {
                          
                      $leading substr($value01);
                          
                      $digit substr($value1);
                          
                      $value $leading . ((int)$digit 99);
                      }

                      /*
                       oder so:
                      foreach ($text as $key => &$value) {
                          $value = substr($value, 0, 1) . ((int)substr($value, 1) + 99);
                      }
                      */
                      $text implode(' '$text); 
                      "My software never has bugs, it just develops random features."
                      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                      Kommentar


                      • #12
                        Vielleicht sollte man den Plan erstmal anzweifeln, statt unsinnige Implementierungen vorzuschlagen. Also: Wozu soll das gut sein? Wo kommt die krude Zeichenkette her und warum wird das nicht früher ersetzt oder gleich richtig zugeordnet?
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar

                        Lädt...
                        X