Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfen auf numerischen Array

Einklappen

Neue Werbung 2019

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

  • Prüfen auf numerischen Array

    Hi,
    sagt mal gibt es noch eine elegantere Lösung zu prüfen, ob ein Array nur numerische Indexe (bei 0 beginnende) besitzt als:

    PHP-Code:
    <?php
    $aIrgendeinArray 
    = array( /* what ever */ );
    $aKeys array_keys($aIrgendeinArray);
    return 
    count(array_diff($aKeysrange(0count($aKeys) - 1))) == 0;
    ?>
    In Worten: nehme die Schlüssel des Arrays und vergleiche sie mit einem neu erzeugten Array der selben Länge. Gibt es keine Differenz ist der Original-Array numerisch.

    Ist die Funktion überhaupt korrekt?! Gibts etwas "richtigereres"?

  • #2
    Oh, das Problem hab ich auch des öfteren.
    Wie wärs damit:
    PHP-Code:
    return ($array === array_values ($array)); 
    , erkennt aber nur numerische Arrays, die mit 0 beginnen...
    wahrscheinlich ists schneller als die Array-Elemente (Schlüssel) zu durchlaufen und mit is_numeric() zu prüfen? Wäre ja mal zu testen, was durchschnittlich (inkl. vorzeitigem Schleifenabbruch) die bessere Performance bietet.

    Kommentar


    • #3
      Re: Prüfen auf numerischen Array

      Zitat von Zergling
      Ist die Funktion überhaupt korrekt?
      Wenn die Indizes auch noch fortlaufend sein müssen, klappt das vermutlich schon. Wenn auch Lücken drin sein dürfen, wohl eher nicht.

      Numeriert array_values neu fortlaufend durch oder übernimmt es die Indizes, die numerisch sind?

      Kommentar


      • #4
        nikosch77, deine Lösung ist irgendwie sehr naheliegend, wusste ichs doch ^^

        Kommentar


        • #5
          @Der_Gerhard: ersteres.

          Kommentar


          • #6
            Dann is die variante aber Mist, wenn das array nicht mit 0 beginnt ^^ Ich weiß grad nich genau, ob die numerischen Indizes auch als Integer gelten, aber wenn ja, ginge auch das

            PHP-Code:
            $keys array_keys($array); // Keys rausziehen
            $numKeys array_filter ($keys'is_int'); // Nur keys beachten, die Integer sind
            if (count($keys) !== count($numKeys)) { // Gibt es gleichviele Integer-Keys wie überhaupt, sind alle Keys Integer
              // ungleich

            Korrigiert Fehler

            Kommentar


            • #7
              interessante variante.
              allerdings ist ne einfache foreach schleife selbt im worst case noch schneller. immerhin ne knappe Sekunde bei 1000000 Array Elementen (ich war mal neugierig).
              Und im im avarage natürlich noch wesentlich chneller, was ja auch die häufigere Variante sein sollte:
              PHP-Code:
              function test (& $aArray)
                {
                foreach (
              $aArray as $mKey =>$tmp) {
                  if (!
              is_int($mKey)) return (false);
                  }
                return (
              true);
                } 
              Wichtig ist die Referenz.

              PS: @KingCrunch: die Parameter von array_filter müssen ausgetauscht werden.

              Kommentar


              • #8
                1. Ja, an foreach dachte ich auch, aber eigentlich hätte ich angenommen, dass es langsamer wäre... Nagut ^^
                2. Stimmt

                Kommentar

                Lädt...
                X