Zweidimensionales Array über Foreach-Schleife

Hallo zusammen

folgende Codes:

<?php $a[0][5]="5";<br />
foreach($a as $key=\>$value)
{
 echo "Schlüßel " . $key . "
";
 echo "Wert " . $value . "
";
}
?\>

Ausgabe:
Schlüßel 0
Wert Array

Hier wird nur Array ausgegeben, aber nichts vom Inhalt der Feldvariable.

Im folgenden Code:

<?php $a[0]="1";<br />$a[0][5]="5";

foreach($a as $key=\>$value)
{
 echo "Schlüßel " . $key . "
";
 echo "Wert " . $value . "
";
}
?\>

Ausgabe:
Schlüßel 0
Wert 1 5

Hier werden die Werte des Arrays ausgegeben. Warum gibt er nicht 1 und Array aus? Im ersten Fall wird anstelle der 5 nur Array ausgegeben.

Gruß und Dank

Moin moin

$a[0][5]=„5“;

var_dump($a);

foreach($a as $key=>$value)
{
echo "Schlüßel " . $key . "
";
echo "Wert " . $value . "
";
}
?>

array
0 =>
array
5 => string ‚5‘ (length=1)

Schlüßel 0
Wert Array

Hier wird nur Array ausgegeben, aber nichts vom Inhalt der
Feldvariable.

Im folgenden Code:

<?php :blush:a[0]="1";
$a[0][5]="5";

var_dump($a);

foreach($a as $key=>$value)
{
echo "Schlüßel " . $key . "
";
echo "Wert " . $value . "
";
}
?>

array
0 => string ‚1 5‘ (length=6)

Schlüßel 0
Wert 1 5

helf Dir selbst mit var_dump !!!

du siehst nur nicht die 4 leerzeichen :smile:

übrigens

$a[0][5] = …

sagt ja aus das der erste wert
im Array $a also [0] ein array mit [5] elementen hat.

machen wir Array $a [0] = „1“ ein string (kein array)
mit [0][5] springen wir dann an die 6 position dieses strings im Array 0 :smile:

Danke!
Hallo und danke für die Antwort!

Wenn also ein Array wie folgt festgelegt wurde

$a[0]=„1“;
$a[0][5]=„5“;

dann bedeutet das, dass ein eindimensionales Feld festgelegt wurde, dass im Schlüssel $a[0][0] den Wert 1 hat und im Schlüssel $a[0][5] den Wert 5.

Wenn aber gleich ein zweidimensionales Feld wie folgt festgelegt wurde

$a[0][5]=„5“;

dann bedeutet das, dass ein der Wert im Schlüssel $a[0][5][0]=„5“ liegt, der Schlüssel $a[0] hingegen auf das Array $a[0][5] zeigt.

Da die foreach Schleife nur den Schlüssel $a[0] sieht gibt sie folglich Array aus.

Gruß und Dank!

nein.

php ist schwach typisiert und daher kommt es manchmal zu sehr unschönen verhalten:

Wenn du eine Variable mit [5] ansprichts dann bedeutet das falls die Variable ein Array ist, oder die Variable leer ist, dass du auf das Element mit dme Key 5 zugreifst.

Wenn die Variable ein String ist dann greifst du auf die Position 5 des Strings zu.

Zur Verdeutlichung:

$array = array("test", "test2");
echo $array[0]; // test
echo $array[1]; // test2

$string = "test";
echo $string[0]; // t
echo $string[1]; // e

$string[0] = "bla";
echo $string[0]; // b
echo $string[1]; // e

echo $string; // best

$string = array("bla");
php \> var\_dump($string);
// array(1) {
// [0]=\>
// string(3) "bla"
// }

$string = "test";
echo $string; // test

ich würde [] auf einen String nicht nutzen.
Das ist für die lesbarkeit und Wartbarkeit von Quellcodes ein ziemlicher Supergau.

Gruß

Nochmals Danke!
Danke für die Erläuterung!