Individueller Array

Schon festgestellt? Dem Forum sind gerade alle Interaktionsmöglichkeiten genommen. :(

Mehr dazu unter: Abstimmung über das Forum

  • Hey. Ich habe ein Problem. Es geht um den Array ($carray). Dieser wird, wenn es mehrere Kategorien gibt erweitert.

    Sprich: Wenn es in der Kategorie 2 Module gibt, die beide offline sind, wird offline ausgegeben. Soweit alles super.

    Sollte es jedoch noch eine andere Kategorie geben, die ein Modul hat, welches online ist, wird trotzdem offline ausgegeben.


    Der Array sieht dann praktisch so aus: array("true", "true", "false");


    Es soll jedoch praktisch für jede Kategorie ein individueller Array erstellt werden. Wie ist das möglich? Danke schonmal!


  • Mal sehen, ob ich das richtig verstehe: Zu jeder Kategorie kann es mehrere Module geben. Ist mindestens ein Modul einer Kategorie online, gilt die ganze Kategorie als online. Und jetzt willst Du, wie in dem früheren Thread, ermitteln, ob alle Kategorien online sind.

    Wenn das zutrifft, sollte es zum Ziel führen, wenn Du das Array zweidimensional anlegst, 1. Dimension die Kategorien, 2. Dimension die Module.

    Bis hierher bin ich von deiner verbalen Beschreibung ausgegangen, aber wenn ich in deinen Code sehe, finde ich keine Module? Ist das so aufgebaut, dass es mehrere Einträge mit dem selben Kategorienamen gibt und dass diese dann die Module sind? *gübel*

  • Naja, so halb.

    Es gibt verschiedene Kategorien, die werden hier abgefragt:

    Code
    1. $statement = $conn->prepare("SELECT * FROM `{$url}` WHERE entrytype = ?");
    2. $statement->execute(array('category'));
    3. while ($row = $statement->fetch())

    Diesen Kategorien können Module zugeordnert werden (der Kategoriename wird dann in der Zeile "value3" eigetragen). Alle Module, welche zu dieser Kategorie gehören werden hier abgefragt:

    Code
    1. $st = $conn->prepare("SELECT * FROM `{$url}` WHERE value3 = ?");
    2. $st->execute(array($categoryname));
    3. while ($catrow = $st->fetch())


    Nun soll es so sein:

    Bei jedem einzelnen Modul soll der Status abgefragt werden. Das wird in der checkcategory.php gemacht. Es wird dann in der Variable $arrayst entweder "true" oder "false" ausgegeben. Das klappt auch super. Der Array wird erstellt.


    Code
    1. require 'inclusions/action/preview/checkcategory.php';
    2. $carray[] = $arrayst;


    Das funktioniert in der ersten Kategorie. In der Zweiten werden jedoch die Werte aus dem ersten Array mit in den Array übernommen (gleicher Variablenname). Ich hoffe, das Problem ist verständlich:saint:

  • Zum Teil verstehe ich es besser, zum Teil bin ich noch am Schwimmen: $arrayst ist, wie der Name sagt, ein Array? Und in dieses Array werden die Werte der einzelnen Module eingetragen? Und dein Problem ist, dass die alten Werte darin stehen bleiben? Dann versuche dies:

    Code
    1. $arrayst = [];
    2. require 'inclusions/action/preview/checkcategory.php';
    3. $carray[] = $arrayst;

    Wenn Du dem Array $carray ein Array $arrayst hinzu fügst, wird das Ganze zweidimensional.

  • Leider nein. Auf dem Bildschirmfoto 2019-07-23 um 23.18.39.pngScreenshot ist es zu sehen. In der Kategorie "Projekte" waren zwei Module. In der Kategorie "ZweiteKategorie" war eines. Die beiden anderen Module werden in den Array mit "reingenommen".









    Hier nochmal der komplette Code:


  • Ich hoffe, das macht es klarer :D

    Code
    1. require 'inclusions/action/preview/checkcategory.php';
    2. $carray[] = $arrayst; // hier wird ein Array erstellt ($carray) - $arrayst ist ein boolean.
  • Inzwischen glaube ich, dass ich deine Aussage aus Posting #1 jetzt besser verstehe:

    Zitat

    Es soll jedoch praktisch für jede Kategorie ein individueller Array erstellt werden. Wie ist das möglich? Danke schonmal!

    Lösung: Ein zweidimensionales Array, wie früher schon angeregt:

    Code
    1. require 'inclusions/action/preview/checkcategory.php';
    2. if (issset($carray[$categoryname])) $carray[$categoryname][]= $arrayst;
    3. else $carray[$categoryname] = [$arrayst];

    Schau mal, ob dir das weiter hilft.

  • Jetzt wird gar nichts mehr im Array gespeichert.

    Oder habe ich was falsch verstanden?

  • Jetzt musst Du natürlich auch die Auswertung anpassen, in_array wird bei einem zweidimensionalen nicht funktionieren. Und überprüfen, ob das Array richtig aufgebaut wird, z. B. durch ein var_dump().

  • PS: Ich sehe gerade, dass da ein Fehler ist:

    $carray[$categoryname] = $arrayst; muss lauten: $carray[$categoryname] = [$arrayst];

    soll ja ein zweidimensionales Array werden.

  • Was ist denn die Alternative zu in_array? Wie wende ich denn var_dump und "in_array" bei einem zweidimensionalen Array an?:/

  • var_dump() kann auch ein zweidimensionales Array ausgeben.


    Was in_array betrifft, so hängt die Auswertung davon ab, was Du haben willst. Du hattest ja den Wunsch, dass die $carray der Module für jede Kategorie getrennt gespeichert werden.

  • Ich erkenne da keine Magie, das bedeutet einfach nur, dass es $carray[$categoryname] an der Stelle nicht gibt...

    Es gehört zum Debuggen, dass man auch solche Ergebnisse von var_dump() interpretieren kann.

  • Nach langer Zeit und dem Lesen vieler Artikel darüber, hat es nun endlich funktioniert.


    Ich bedanke mich bei allen für die Hilfe und die wirklich hilfreichen Beiträge! :)

  • Eine Frage habe ich noch.


    Ich bekomme nun

    bool(true)

    returned.


    Wie kann ich nun mit diesem Wert arbeiten?


    Ich hätte jetzt z.B. so gedacht:

    Code
    1. if(var_dump(in_array('false', $carray[$categoryname]))) {
    2. echo "FALSE";
    3. }


    Aber so geht es nicht. Ich habe dazu leider auch wirklich nichts im Internet gefunden. Hat da jemand eine Lösung?:/