• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Simples Array "Loop" Problem

Hellow

Neues Mitglied
Hallo zusammen,


ich hätte mal wieder ein Problem'chen - dieses mal sollte es eigentlich recht problemlos sein.
Dazu habe ich ein Scriptchen geschrieben und würde das nun für mehrere Nicknames/Urls durchlaufen lassen.

Würde ich die Daten aus einer MySql laden könnte ich das ja mit mysql_fetch_array( ) durchlaufen lassen, aber das nützt in dem Fall relativ wenig. Mit einer For Schleife schien es auch nicht ganz aufzugehen da ich ja immer 2 Einträge aus dem Array brauche. Irgendwie vermute ich, dass ich noch nicht ganz Reihen/Spalten in Arrays kapiert habe.

PHP:
 <?php 
$nicknamea="User1";
$urla="1.html";
$nicknameb="User2";
$urlb="2.html";
$nicknamec="User3";
$urlc="3.htm";
$nicknamed="User4";
$urld="4.html";
$nicknamee="User5";
$urle="5.html";

$kombi= array($nicknamea,$urla,$nicknameb,$urlb,$nicknamec,$urlc,$nicknamed,$urld,$nicknamee,$urle);

while ($kkombi=$kombi) {
  $nickname1=$kkombi[0];
  $url1=$kkombi[1];
   echo $nickname1."<br>";
   echo $url1;
...
}
?>
 
Beispiel:

PHP:
<?php

function formatData($data)
{
    $ret  = '';
    $size = count($data);

    // Wenn Array keine gerade Anzahl an Einträgen enthält, füge einen hinzu
    if ($size % 2 > 0) {
        $data[] = 'UNKNOWN';
        $size++;
    }

    for ($i = 0; $i < $size; $i += 2) {
        $nickname = $data[$i];
        $url      = $data[$i + 1];

        $ret .= sprintf("%s, %s\n", $nickname, $url);
    }

    return $ret;
}

$nicknamea="User1";
$urla="1.html";
$nicknameb="User2";
$urlb="2.html";
$nicknamec="User3";
$urlc="3.htm";
$nicknamed="User4";
$urld="4.html";
$nicknamee="User5";
$urle="5.html";

$kombi= array($nicknamea,$urla,$nicknameb,$urlb,$nicknamec,$urlc,$nicknamed,$urld,$nicknamee,$urle,'Steve');



echo formatData($kombi);

Beispiel mit mehrdimensionalem Array (Array von Arrays):

PHP:
<?php

function formatData($data)
{
    $ret  = '';

    foreach ($data as $d) {
        $ret .= sprintf("%s, %s\n", $d['nickname'], $d['url']);
    }

    return $ret;
}

$data = array();
$data[] = array('nickname' => 'User1',
                'url'      => '1.html');
$data[] = array('nickname' => 'User2',
                'url'      => '2.html');
$data[] = array('nickname' => 'User3',
                'url'      => '3.htm');
$data[] = array('nickname' => 'User4',
                'url'      => '4.html');
$data[] = array('nickname' => 'User5',
                'url'      => '5.html');

echo formatData($data);

Ansatzweise objektorientiert:

PHP:
<?php

class User
{
    protected $nickname;
    protected $url;

    public function __construct($nickname, $url)
    {
        $this->setNickname($nickname);
        $this->setUrl($url);
    }

    public function getNickname()
    {
        return $this->nickname;
    }

    public function setNickname($nickname)
    {
        $this->nickname = $nickname;
    }

    public function getUrl()
    {
        return $this->url;
    }

    public function setUrl($url)
    {
        $this->url = $url;
    }
}

function formatData($data)
{
    $ret  = '';

    foreach ($data as $d) {
        $ret .= sprintf("%s, %s\n", $d->getNickname(), $d->getUrl());
    }

    return $ret;
}

$users = array();
$users[] = new User('User1', '1.html');
$users[] = new User('User2', '2.html');
$users[] = new User('User3', '3.htm');
$users[] = new User('User4', '4.html');
$users[] = new User('User5', '5.html');

echo formatData($users);

Möglichkeiten gibt es viele. Die Schwierigkeiten stecken immer in den Details, beispielsweise in der Behandlung von Ausnahmen. Was passiert, wenn in einem der Teilarrays der Index „nickname“ nicht gesetzt ist? Was passiert wenn setNickname() keinen String liefert? Sowas in der Art. Das habe ich hier nur beim ersten Beispiel halbwegs beachtet.
 
Hallo,

das mit den Arrays ist nicht so einfach. Ich versuche dir das mal bildlich zu erklären, so dass du es verstehst.

Es gibt da also eindimensionale, zweidimensionale und mehrdimensionale Arrays.
Häufig wird es so erklärt das es sich Hierbei um ein Feld handelt, das finde ich zu Abstrakt. Die englischen Seiten sprechen von map, das Karte bedeutet und es besser darstellt.

Nehmen wir an du willst zum Strand und fragst danach welches Handtuch du nehmen sollst.
Dir wird gesagt nimm eins von der Wäscheleine.
Jetzt siehst du aber das da 4 Handtücher hängen. Ein weisses mit Roten Streifen, ein beiges, ein kariertes und eines mit Stickereien. Das ist schon mal unser Array und zwar eindimensional.
Jetzt fragst du, weil du dir unsicher bist, welches du nehmen sollst.
Dir wird mitgeteilt du kannst das 3. Handtuch von links nehmen.
Aha - jetzt weist du Bescheid.

Du fängst an zu zählen 1,2,3 und nimmst dir das karierte Handtuch.
Übertragen wir das auf unser Array, dann heisst das Array Handtuch und enthält 4 Handtücher.
Wir schreiben

$Handtuch=Array("weiss mit roten Streifen", "beige", "kariert", "mit Stickereien");

Das 3. Feld in unserem Array entspricht dem 3. Handtuch in der Realität.

Echo $Handtuch[2]; (ANMERK. 1. Feld beginnt bei 0 nicht 1)

gibt aus -> kariert.

Nun ein anderes Beispiel für zweidimensionale Arrays.

Du stehst vor einem Regal mit ganz vielen verschlossenen Kisten und suchst die Anleitung für deine Videokamera. Dummerweise weisst du nicht mehr in welcher der vielen Kisten diese Anleitung liegt. Weil dir das öfter passiert, entschliesst du dich eine Inventarliste der Kisten zu erstellen und diese gleichzeitig zu nummerieren.
Du fängst oben links an. Da es ein kleines Regal ist mit nur 4 Regalböden und jeweils 4 gleich grossen Kisten machst du ein Quadrat daraus und schreibst in Jedes Quadrat was in den Kisten liegt. Du öffnest die erste Kiste im oberen Regal. Du findest Kerzen. Die 2. Kiste enthält Glühlampen.
Wir übertragen das wieder in unser Array.
Diesmal nennen wir es Regal.
$Regal[1][1] = "Kerzen"
Das würde bedeuten das wir an der Position 1,1 also 1. Kiste oberstes Regal Kerzen haben oder war es doch die 1. Kiste im untersten Regal?
Da wir hier mit Zahlen leicht durcheinander geraten bei unserem System, benennen wir die Felder einfach mit Namen:

$Regal["oberstes Regal"]["1. Kiste"] = "Kerzen";
$Regal["oberstes Regal"]["2. Kiste"] = "Glühlampen";

... 10 Minuten später:
$Regal["unterstes Regal"]["4. Kiste"] = "Anleitungen";

So was nennt man assoziatives Array. Es ist klar das so was nicht sinnvoll ist aber soll ja auch nur zur Veranschaulichung dienen.

Was sind jetzt mehrdimensionale Arrays. Im Grunde so wie zweidimensionale nur mit mehr Feldangaben. Wenn man eine Adresse sucht hat man auf unserem Globus das Land, die Stadt, die Strasse und die Hausnummer anzugeben. In den meisten Ländern zumindest.

Auf ein Array übertragen wäre das dann:
$Anschrift = [Land][Stadt][Strasse][Hausnummer]
Das wäre jetzt ein 4dimensionales Array. Hier sieht man jetzt auch das Karte als Begriff besser passt als Feld.
Wir können noch das Stockwerk mit angeben, oder Telefonnummer oder was auch immer.

Man kann also mit Schleifen wunderbar durch die einzelnen Felder wandern und sich die Inhalte ausgeben lassen oder eben auch Inhalte ins Array schreiben.

Jetzt weisst du auch das hier anders lösen kannst.
Code:
[COLOR=#000000][COLOR=#0000BB]$nicknamea[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"User1"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$urla[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"1.html"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$nicknameb[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"User2"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$urlb[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"2.html"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$nicknamec[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"User3"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$urlc[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"3.htm"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$nicknamed[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"User4"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$urld[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"4.html"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$nicknamee[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"User5"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]$urle[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"5.html"[/COLOR][COLOR=#007700];
[/COLOR][/COLOR]


PHP: Arrays - Manual
 
Zuletzt bearbeitet von einem Moderator:
...

$Handtuch=Array("weiss mit roten Streifen", "beige", "kariert", "mit Stickereien");

Das 3. Feld in unserem Array entspricht dem 3. Handtuch in der Realität.

Echo $Handtuch[3];

gibt aus -> kariert.

...

Vorsicht, der Zähler bei einem eindimensionalem Array beginnt bei dem Index 0!

PHP:
echo $Handtuch[3]; // Gibt demnach "mit Stickereien" aus!
 
Zurück
Oben