Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Einzelne Nullstellen im Array finden

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Einzelne Nullstellen im Array finden

    Hallo zusammen,

    ich habe ein Problem, Nullstellen auf die bestimmte Bedingungen zutreffen in einem Array zu finden.

    Eine Beispielsituation:
    Code:
    $array = array(0,1,11,21,31,43,0,0,0,37,54,66,0,11,23,0);
    Nun hätte ich gerne gewusst, an welcher Stelle der Wertereihe eine einzelne Null vorkommt.
    Per Definition interessieren mich alle einzelnen Nullstellen, soweit sie nicht am Anfang oder am Ende des Arrays stehen.

    Ich möchte versuchen, dies an dem Obrigen Beispiel zu erklären:
    $array[0] = gültig, null am Anfang
    $array[1] bis $array[5] = gültig, keine Null
    $array[6] = gültig, steht nicht alleine, es folgt eine weitere Null
    $array[7] = gültig, steht nicht alleine
    $array[8] = gültig, steht nicht alleine, vorangegangen ist eine Null
    $array[9] bis $array[11] = gültig, keine Null
    $array[12] ungültig, Null, weder eine weitere Null folgt, noch steht davor.
    $array[13] bis $array[14] = gültig, keine Null
    $array[15] gültig, es folgt keine weitere Null.

    Als Ergebnis hätte ich gerne etwas in der Form vom $ungueltig = array(12) um diese Stellen im Ausgangsarray einer besonderten Behandlung zuführen zu können.

    Meine bisherigen Versuche mit array_search waren leider nicht erfolgreich, da ich dort immer nur das erste Vorkommen einer Null zurückbekomme (dies ist lt. php-Doku auch so richtig).

    Ich hoffe auf eine Lösung, auch wenn Problembeschreibung nicht meine Stärke ist.

    Sollten noch Fragen offen geblieben sein, werde ich gerne versuchen diese zu beantworten.

    Gruß
    Stern74


  • #2
    Mit array_filter alle Nullen auslesen und danach überprüfen ob der nächste und übernächste Wert existiert. Wenn ja den mittleren nehmen. Damit sind letzte und erste Zahl gleich null ja auch direkt ausgeschlossen.

    Kommentar


    • #3
      Zitat von Stern74 Beitrag anzeigen
      Per Definition interessieren mich alle einzelnen Nullstellen, soweit sie nicht am Anfang oder am Ende des Arrays stehen.
      Das musst du noch genauer spezifizieren.

      Bei
      Code:
      0, 0, 0, 4711, ...
      - soll hier nur die erste Null als „am Anfang stehend“ betrachtet werden, oder die ersten drei?

      Wenn ersteres, dann ist die Lösung gaaanz simpel -
      PHP-Code:
      $array = array(0,1,11,21,31,43,0,0,0,37,54,66,0,11,23,0);
      $nullen = array();

      for(
      $i 1$l count($array)-1$i<$l; ++$i) {
        if(
      $array[$i] === 0) {
          
      $nullen[] = $i;
        }
      }
      print_r($nullen); 
      (Eine Prüfung, ob das Array überhaupt genügend Einträge enthält, um die Schleife von 1 bis count-1 laufen zu lassen, fehlt da noch - dazu bitte wenigstens mal selber Gedanken machen.)


      Damit erhältst du die Indices, an denen eine Null steht, ohne das erste und letzte Element zu betrachten.

      Als Ergebnis hätte ich gerne etwas in der Form vom $ungueltig = array(12) um diese Stellen im Ausgangsarray einer besonderten Behandlung zuführen zu können.
      Kannst du diese Sonderbehandlung nicht auch gleich während der Verarbeitung des Original-Arrays vornehmen?

      Kommentar


      • #4
        Zitat von ChrisB Beitrag anzeigen
        Das musst du noch genauer spezifizieren.

        Bei
        Code:
        0, 0, 0, 4711, ...
        - soll hier nur die erste Null als „am Anfang stehend“ betrachtet werden, oder die ersten drei?
        Siehe oben das Beispiel, 3 aufeinanderfolgende Nullen sollen nicht markiert werden, die Null am Anfang interessiert auch nicht.

        Zitat von ChrisB Beitrag anzeigen
        Wenn ersteres, dann ist die Lösung gaaanz simpel -
        Wenn der richtige Denkanstoß kommt, sind viele Dinge auf einmal gaaaanz einfach

        Hier die Lösung, die wirklich nur dann Anspringt, wenn eine einsame Null auftaucht (nicht am Anfang und nicht am Ende).

        PHP-Code:
        <?php
        $array 
        = array(0,1,11,21,31,43,0,0,0,37,54,66,0,11,23,0);
        $solonullen = array();

        for(
        $i 1$l count($array)-1$i<$l; ++$i) {
          if(
        $array[$i] === and ($array[$i-1] !=0) and ($array[$i+1] !=0) ) {
            
        $solonullen[] = $i;
          }
        }
        print_r($solonullen);
        ?>
        Dank an euch beide.

        Kommentar

        Lädt...
        X