Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] In Arrays aufsplitten, dann zusammenfügen?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] In Arrays aufsplitten, dann zusammenfügen?

    Hallo Leute,

    ich bin ein php-newbie und brauche bisschen Gedankenanschub.

    Ich will eine 8-stellige Zahl aufsplitten und mit den einzelnen Zahlen weiterarbeiten.

    z.B.
    Die Zahl 12345678 kann ich mit str_split aufsplitten und in Arrays speichern. Aber die ersten 5 und die letzten 3 Zahlen muss ich getrennt erhöhen. Ich könnte zwar mit str_split(str, 5) die ersten 3 in Array speichern aber das will ich nicht, weil ich später auch mit einzelnen Zahlen weiterarbeiten muss.

    Was will ich genau?

    Es gibt eine 10-Stellige zahl, die letzten 2 Stellen werden aus den ersten 8 Stellen berechnet. Aber vorher müssen diese ersten 8 Zahlen in 2 Teile getrennt werden.

    Bsp.:

    12345678

    12345 um 1 erhöhen 12346
    678 um 1 erhöhen 679

    12346679

    Jetzt müssen ungerade und gerade stellen aufsummiert und mit modulo berechnet werden.

    1+3+6+7=17 mod 2 = 1
    2+4+6+9=21 mod 2 = 1

    Jetzt habe ich die Zahl:
    1234667911

    Genau das will ich jetzt mit php machen.

    Meine Frage ist, wie kann ich die einzelnen Arraywerte zu einer variable übergeben, damit ich wie mit einer ganzen Zahl weiterarbeiten kann?

    z.B. $var = Array[0], Array[1], Array[2], Array[3], Array[5]

    und welche anderen Tipps könnt ihr mir geben.

    Vielen Dank

  • #2
    Benutz doch lieber [MAN]substr[/MAN]


    PHP-Code:
    substr ($input 5);
    substr ($input 3); 
    etc.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      danke nikosch

      PHP-Code:
      $zahl 12345678;

      preg_match('#(\d{5})(\d{3})#'$zahl$array);

      $first5 $array[1]+1
      $last3 $array[2]+1

      $zahl2 str_split($zahl);




      $neun = ($zahl2[0]+$zahl2[2]+$zahl2[4]+$zahl2[6])%2;
      $zehn = ($zahl2[1]+$zahl2[3]+$zahl2[5]+$zahl2[7])%2;

      $ergebnis $first5.$last3.$neun.$zehn;

      echo 
      $ergebnis
      das liefert mir das gewünschte Ergebnis 1234667900 aber mit diesem Zahl möchte ich weiterarbeiten und 50 x wiederholen. Wenn ich das in for-schleife reinpacke, bekomme ich immer das gleiche Ergbenis. Irgend etwas mache ich falsch mit der Schleife aber was?

      Ach ja, ich weiss schon das man oben einiges besser machen kann aber meine Kenntnisse haben nur soweit gereicht

      Kommentar


      • #4
        Zitat von maynak Beitrag anzeigen
        danke nikosch

        PHP-Code:
        $zahl 12345678;

        preg_match('#(\d{5})(\d{3})#'$zahl$array);

        $first5 $array[1]+1
        $last3 $array[2]+1

        $zahl2 str_split($zahl);




        $neun = ($zahl[0]+$zahl[2]+$zahl[4]+$zahl[6])%2;
        $zehn = ($zahl[1]+$zahl[3]+$zahl[5]+$zahl[7])%2;

        $ergebnis $first5.$last3.$neun.$zehn;

        echo 
        $ergebnis
        das liefert mir das gewünschte Ergebnis 1234667911 aber mit diesem Zahl möchte ich weiterarbeiten und 50 x wiederholen. Wenn ich das in for-schleife reinpacke, bekomme ich immer das gleiche Ergbenis. Irgend etwas mache ich falsch mit der Schleife aber was?

        Ach ja, ich weiss schon das man oben einiges besser machen kann aber meine Kenntnisse haben nur soweit gereicht
        Pack das ganze doch einfach in eine Funktion und führ diese Funktion dann in einer Schleife aus. Oder du setzt am Anfang halt $zahl und führst dann in der Schleife deine Rechenoperationen durch und schreibst das Ergebnis wiederrum in $zahl (statt wie bei dir in $ergebnis), wodurch beim nächsten Schleifendurchlauf das neue Ergebnis verwendet wird.

        mfg

        Kommentar


        • #5
          Was passiert eigentlich bei $last3=999 + 1, $last3=950 + 50 usw ? Oder kann das nicht vorkommen?


          $zahl2 = str_split($zahl);
          Willst Du mit der "alten" oder der "neuen" Zahl weiterrechnen?

          Kommentar


          • #6
            Und was macht $tahl2?

            $zahl2 = str_split($zahl);
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              uppps mein Tippfehler. Natürlich rechne ich mit zahl2 weiter.Ich habe beim eintippen vergessen es so zu schreiben.Ich werde es mal mit der Schleife gleich ausprobieren.

              Kommentar


              • #8
                Trotzdem rechnest Du mit dem angegeben Code mit der alten Zahl weiter.

                PHP-Code:
                $zahl2 str_split($first5.$last3); 
                Erst damit enthält $zahl2 die neuen, veränderten Ziffern.

                Kommentar


                • #9
                  hallo David,
                  danke danke.es hat zwar ein ergebnis geliefert aber war kein richtiges. komischerweise habe ich im laufe der arbeit ein ergebnis geprüft und es war richtig.

                  Ich habe dank euren Tipps hinbekommen. Jetzt bin ich dabei die Prozedur sicherer zu machen, damit keine unerwarteten Fehler auftauchen.

                  Danke an alle!

                  Kommentar


                  • #10
                    Und da entscheide dich dann bei Fragen bitte für ein Forum.

                    PHP script resource - Zahl splitten und mit Arrays weiterarbeiten?!

                    Bitte zu Crosspostings belesen.
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    [URL]http://www.lit-web.de[/URL]

                    Kommentar


                    • #11
                      Danke für dein Rat litterauspirna, schliesslich sucht man sich auch das beste Forum aus. Darum schreibe ich hier weiter.


                      Ich habe jetzt ein Bug entdeckt. Beim preg_match('#(\d{5})(\d{3})#', $zahl, $array); werden führende Nullen ignoriert, das liefert wiederum falsche Ergebnisse. z.B. 12345078 = 12345 078->hier wird die führende Null ignoriert und die Zahl wird ohne Null genommen.

                      Wie könnte ich das verhindern ?

                      Kommentar


                      • #12
                        Indem Du einfach auf die Zahl 1001 addierst
                        PHP-Code:
                        <?php
                        function foo($zahl$i) {
                          
                        $zahl += 1001*$i;
                          
                        $d str_split($zahl);
                          
                        $neun = ($d[0]+$d[2]+$d[4]+$d[6])%2;
                          
                        $zehn = ($d[1]+$d[3]+$d[5]+$d[7])%2;

                          return 
                        $zahl.$neun.$zehn;
                        }


                        $zahl 12345678;
                        for(
                        $i=1$i<51$i++) {
                          echo 
                        foo($zahl$i), "\n";
                        }

                        Kommentar


                        • #13
                          Hallo David,
                          du hast mir wirklich sehr geholfen. Ich danke dir sehr. Ich werde es ausprobieren aber irgendwie müsste man das auch in preg_match klären können oder ?
                          In deinem Vorschlag hast du z.B. die Erhöhung der 5. und 8. Stelle nicht berücksichtigt.

                          PHP-Code:
                          function foo($zahl$i) {
                            
                          $zahl += 1001*$i;
                            
                          preg_match('#(\d{5})(\d{3})#'$zahl$array);
                            
                          $first5 $array[1]+1
                            
                          $last3 $array[2]+1;
                            
                          $zahl2 str_split($first5.$last3);
                            
                            
                          $d str_split($zahl2);
                            
                          $neun = ($d[0]+$d[2]+$d[4]+$d[6])%2;
                            
                          $zehn = ($d[1]+$d[3]+$d[5]+$d[7])%2;

                            return 
                          $first5.$last3.$neun.$zehn;

                          Deinen Vorschlag könnte ich so wie hier oben anpassen und benutzen aber da würde ich immer noch das gleiche Problem haben. Natürlich könnte ich auch falschliegen, weil ich es noch nicht ausprobiert habe.

                          In zusammengesetzter Form werden auch manchmal Uhrzeiten oder Datum (z.B. 19870121) aufgesplittet und da sind auch führende Nullen sehr wichtig. Ich habe zwar gesucht aber nichts passendes gefunden. Es sei denn preg_match macht es richtig aber die führenden Nullen werden später in der Prozedur ignoriert. Aber auf alle Fälle, ich danke dir sehr.

                          Kommentar


                          • #14
                            Hallo David, dein Vorschlag funktioniert wunderbar wenn man die 5. Stelle und 8. erhöhen muß also 12345678 -> 12346679 deshalb nimmst du 1001 und falls führende Nullen auftauchen, werden sie nicht abgeschnitten.Aber was mache ich wenn ich die 5. Stelle um 1 erhöhen und die 8. Stelle um 1 reduzieren muss 12345678 -> 12346677 mit 1001 multiplizieren und dann addieren würde mich nicht weiterbringen. Ich weiss, dass ich jetzt etwas nerve aber dieses kleine Detail macht leider den ganzen Code nutzlos falls irgendwelche führende Nullen auftauchen.Array nimmt die Zahlen als integer und die führende Nullen werden abgeschnitten.

                            Kommentar


                            • #15
                              Oh, davon, dass es verschiedene Varianten gibt, stand bisher nichts im Thread.
                              wenn ich die 5. Stelle um 1 erhöhen und die 8. Stelle um 1 reduzieren muss
                              Dann wäre die Zahl statt 1001 die 999.
                              12345678 + 999 = 12346677. Wie viele Varianten gibt es denn?
                              Du kannst bei der Darstellung als Zeichenkette dafür sorgen, dass eine bestimmte Breite/Länge eingehalten wird. Zum Beispiel mit sprintf.
                              PHP-Code:
                              $result sprintf('%05d%03d'$first5$last3
                              %d steht für eine Ganzzahl
                              %5d stellt die Zahl mit mindestens 5 Stellen dar. Ist die Zahl kürzer wird von links mit Leerzeichen aufgefüllt
                              %05d stellt die Zahl mit mindestens 5 Stellen dar. Ist die Zahl kürzer wird von links mit 0-Zeichen aufgefüllt

                              Kommentar

                              Lädt...
                              X