Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler Undefined offset ohne Überschreitung der Arraygröße

Einklappen

Neue Werbung 2019

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

  • Fehler Undefined offset ohne Überschreitung der Arraygröße

    Hallo,
    Ich bin ziemlicher Neueinsteiger in PHP und hab daher noch nicht viel Ahnung.
    Auf jedenfall hatte ich einen Code geschrieben, der ein Array mit 10 Zufallszahlen erzeugt, ausgibt, sortiert und wieder ausgibt. Zumindest sollte er dies tun.
    PHP-Code:
    <?php
    $i 
    0;
    $randArray = array();
    while (
    $i<10){
        
    $randArray[] = rand(0100);
        
    $i++;
    }
    print_r($randArray);
    echo 
    $randArray[1];
    $j 0;
    while (
    $j COUNT($randArray)-1) {
        
    $k 0;
        
    $o 1;
        while (
    $k COUNT($randArray)-$j) {
            
    $swap1 $randArray[$k];
            
    $swap2 $randArray[$o];
            
    $swap3 NULL;
            if(
    $swap1>$swap2) {
                
    $swap3 $swap1;
                
    $swap1 $swap2;            
                
    $swap2 $swap3;
            }
            
    $randArray[$k] = $swap1;
            
    $randArray[$o] = $swap2;
            
    $k++;
            
    $o++;
        }
        
    $j++;
    }
    print_r($randArray);
    ?>
    Also bis zum erzeugen und ersten ausgeben des Array läuft alles perfekt. Jedoch krieg ich immer wieder den Fehler:
    Notice: Undefined offset: 10 in D:\Xampp\htdocs\test\index.php on line 166
    (line 166 bezieht sich hier auf
    PHP-Code:
    $swap2 $randArray[$o]; 
    Und dieser Fehler würde wohl auch in einer Endlosschleife auftreten, für PHP nicht nach 30sec aufhören. Nach kurzer Google-Recherche erfuhr ich dann, dass dieser Fehler angeblich die Überschreitung der Arraylänge sein soll, was meines Wissen aber nicht möglich ist.
    SIeht irgendwer meinen Fehler? Vielen Dank.

  • #2
    Das passiert weil du
    PHP-Code:
    $o 1
    setzt. In der letzten "Runde" ist $o dann immer um ein Index zu hoch. Da Arrays standartmäßig die Indizes von 0 - x verwenden. Ein Array mit 10 Einträgen hat also als höchsten Index den Wert 9 und du Fragst den Wert 10 ab.

    oder mit anderen Worten du überschreitest die Array Größe.

    Kommentar


    • #3
      Frage vorweg, sortierst du absichtlich selbst (wie heißt das "Bubble-Sort" oder so) zwecks Lernen etc..? PHP hat einige Sortierfunktionen für Arrays an Board: http://php.net/manual/de/array.sorting.php

      LG
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        PHP-Code:
        $i 0
        $randArray = array(); 
        while (
        $i<10){ 
            
        $randArray[] = rand(0100); 
            
        $i++; 

        print_r($randArray); 

        for(
        $a 0$a count($randArray); $a++)
        {
            for(
        $b 0$b<count($randArray); $b++)
            {
                if(
        $b count($randArray)-1// Das nächste IF kann auch mit einer AND Verknüpfung hier kombiniert werden
                
        {
                    if(
        $randArray[$b] > $randArray[$b 1])
                    {
                    
        $swap $randArray[$b];
                    
        $randArray[$b] = $randArray[$b 1];
                    
        $randArray[$b 1] = $swap;
                    }
                }    
            }
        }
        print_r($randArray); 
        Das sollte das gewünschte Ergebnis liefern.

        Kommentar


        • #5
          Auch wenn es der TE vermutlich wirklich zum Üben verwendet, hier der Vollständigkeit halber auch noch die Variante mit einer der PHP-internen Sortierfunktionen (und mit for statt while, spart noch eine Zeile ):

          PHP-Code:
          $i 0;  
          $randArray = array();  

          for (
          $i 0$i 10$i++){  
              
          $randArray[] = rand(0100);  
          }  
          print_r($randArray);  

          sort($randArray);
          print_r($randArray); 
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Vielen Dank für die ganzen Antworten.
            Ja, ich programmiere den BubbleSort aus Lernzwecken. Ich habe im Abitur Java gemacht und brauche PHP nun für die Arbeit. Daher geh ich jede Übung aus Schultagen durch und versuche sie von Java auf PHP anzuwenden^^

            Ich hab nun folgendes gmacht:
            PHP-Code:
            <?php
            $i 
            0;
            $randArray = array();
            while (
            $i<10){
                
            $randArray[] = rand(0100);
                
            $i++;
            }
            print_r($randArray);
            echo 
            $randArray[1];
            $j 0;
            while (
            $j < (COUNT($randArray))-1) {
                
            $k 0;
                
            $o 1;
                while (
            $k < (COUNT($randArray))-$j-1) {
                    
            $swap1 $randArray[$k];
                    
            $swap2 $randArray[$o];
                    
            $swap3 NULL;
                    if(
            $swap1>$swap2) {
                        
            $swap3 $swap1;
                        
            $swap1 $swap2;            
                        
            $swap2 $swap3;
                    }
                    
            $randArray[$k] = $swap1;
                    
            $randArray[$o] = $swap2;
                    
            $k++;
                    
            $o++;
                }
                
            $j++;
            }
            print_r($randArray);
            ?>
            Also schlicht
            PHP-Code:
            while ($k COUNT($randArray)-$j-1
            anstatt
            PHP-Code:
            while ($k COUNT($randArray)-$j 

            Kommentar

            Lädt...
            X