Auge: Array-Element existiert, aber verliert Inhalt

Hallo

Aus einer Datenbank lese ich die Zeilen aus und erhalte ein Array folgenden Schemas:

$row[0][0] = "2004-09-30";
$row[0][1] = 1;
$row[1][0] = "2004-10-01";
$row[1][1] = 1;
... usw. usf. ...

Von dem jeweiligen Feld [0], welches ein Datum repräsentiert, brauche ich nur
die Jahres- und Monatsangabe. Diese hole ich mir in einer Schleife

while ($row = mysql_fetch_row($a))
   {
   $test[] = substr($row[0],0,7);
   }

Hernach gebe ich den Inhalt des Arrays $test in einer Schleife aus, und finde
dort alle Werte (in diesem Falle aus dem Sep., Okt. und Nov. diesen Jahres) vor.
Da ich eigentlich nur wissen will, ob es Datensätze im jeweiligen Monat gibt,
jage ich über das Array $test mit array_unique() rüber.

$test = array_unique($test);

Die neuerliche Ausgabe per Schleife gibt folgendes aus:

for ($d=0;$d<count($test);$d++)
   {
   echo "<p>".$d." - ".$test[$d]."</p>\n";
   }

0 - 2004-09
1 - 2004-10
2 -

Das Element für den November des Jahres existiert zwar, es ist aber leer.
Woran kann das liegen?

Tschö, Auge

--
Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
(Victor Hugo)
  1. Hello,

    Die neuerliche Ausgabe per Schleife gibt folgendes aus:

    for ($d=0;$d<count($test);$d++)
       {
       echo "<p>".$d." - ".$test[$d]."</p>\n";
       }

    0 - 2004-09
    1 - 2004-10
    2 -

    Das Element für den November des Jahres existiert zwar, es ist aber leer.
    Woran kann das liegen?

    Das liegt an Deiner falschen Abfragetechnik in der Schleife.

    überleg mal, wann die Schleife endet. Jau! 1000 Punkte!
    Die endet genau dann, wenn kein Wert mehr übergeben worden konnte, oder der Wert 0 oder leer war.
    Da muss man einmal zwischenstapeln. Außerdem sind for-Schleifen bei PHP-Arrays sowieso "daneben"

    foreach($test as $key => $val)
    {
      echo "<p>$key - $val</p>";
    }

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hello,

      Sorry, was habe ich denn da eben gesehen?
      Das war ja gar nicht der Standartfehler[tm] ;-)

      Die Abfrage mit "Standardfehler" weist in der While-Schleife direkt dem Array den Wert zu, aber das machst Du ja gar nicht.

      also falsch:  while($test[] = mysql_fetch_row($res));
        dann wäre das letzte Arrayelement immer false bzw leer.

      Schau doch nochmal genau nach, ob Du das nicht doch irgendwo so gemacht hast.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    2. Hallo

      for ($d=0;$d<count($test);$d++)
         {
         echo "<p>".$d." - ".$test[$d]."</p>\n";
         }

      0 - 2004-09
      1 - 2004-10
      2 -

      Das Element für den November des Jahres existiert zwar, es ist aber leer.
      Woran kann das liegen?

      Das liegt an Deiner falschen Abfragetechnik in der Schleife.

      Recht gehabt, wenn auch anders als gedacht.

      Die endet genau dann, wenn kein Wert mehr übergeben worden konnte, oder der Wert 0 oder leer war.

      Das war's nicht. Falls ich dich nicht falsch verstanden haben sollte.

      foreach($test as $key => $val)
      {
        echo "<p>$key: $val</p>";
      }

      Mit dieser Schleife kommt im Gegensatz zu obiger Konstruktion folgendes Ergebnis:

      0: 2004-09
      1: 2004-10
      4: 2004-11

      Oben wird ja der Zähler aufgeführt, unten der Key daselbst.
      Das hilft mir schon erheblich weiter. Danke für den Denkanstoß.

      Tschö, Auge

      --
      Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
      (Victor Hugo)
      1. Hello,

        Das liegt an Deiner falschen Abfragetechnik in der Schleife.

        Recht gehabt, wenn auch anders als gedacht.

        Ja, sorry. da hatte ich ja auf den ersten Blick sowieso schief geguckt.
        Aber diese Konstruktionen mit festen Incrementen lassen bei mir immer die Alarmglocken läuten. Du hattest nur leider nicht erwähnt, wie die Indices erzeugt worden sind.

        Da Du sie einmal als Index und einmal als assoziativen Schlüssel verwendest...

        Aber das hast Du ja nun selbst herausgefunden.

        Ein ähnlicher Fehler tritt ja gerne beim Zugriff auf Dateien in Verzeichnissen auf, wenn man einmal über Handle und einmal über Namen zugreift.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo

          Da Du sie einmal als Index und einmal als assoziativen Schlüssel verwendest...

          Naja, verwenden wollte ich es ja eigentlich nicht "so" verschiedenartig.
          Aber das testen mit beiden Wegen brachte mich darauf, dass array_unique()
          zwar doppelte/mehrfache Values entfernt, die Keys der bestehenbleibenden
          Elemente des Arrays aber unangetastet lässt.

          So begab es sich, dass die for-Schleife das Element mit dem Key [2] ausgeben
          wollte, welches nicht existierte, obwohl das Array 3 Elemente hat. Das gesuchte
          Element hat <?t=92980&m=562428@tilte=wie schon geschrieben> den Key [4].

          Aber das hast Du ja nun selbst herausgefunden.

          Nach längerem Suchen. :-)

          Tschö, Auge

          --
          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
          (Victor Hugo)