Mehrdimensionale Arrays
Christian
- php
Hi,
ich bin gerade dabei eine Bookmark funktion zu schreiben bei der es möglich sein soll Pfade einzufügen für eine bessere Übersichtlichkeit.
Jetz ist folgendes Problem aufgetreten:
ich habe ein Array das so aussieht:
array
(
[0] = verz0
[1] = verz1
[2] = verz2
)
dieses array versuche ich in folgendes umzuwandeln:
array
(
[verz0] => Array
(
[verz1] => Array
(
[verz2] =>
)
)
)
dabei ist noch zu sagen, daß die Anzahl und die Namen natürlich variabel sind.
Dies versuche ich so:
$ct = count($path)-1; // $path ist das oben erste Array
$ct_tmp = $ct;
// Ordner nur eine Ebene tief
if($ct == 0) { $tmp[$path[$ct_tmp]] = ""; }
// Ordner mehrere Ebenen tief
else
{
while($ct_tmp != -1)
{
// Erster durchlauf / letzter Ordner
if($ct_tmp == $ct) { $tmp2 = array( "$path[$ct_tmp]" => ""); }
// Zwishendurchlauf
else if($ct_tmp != 0)
{
$tmp2["$path[$ct_tmp]"] = $tmp2;
}
// letzter Durchlauf
else
{
$tmp["$path[$ct_tmp]"] = $tmp2; // hier werden beide Arrays zusammengeführt $tmp und $tmp2
}
$ct_tmp--;
}
}
wenn ich nun aber print_r($tmp) eingebe bekomme ich folgende Ausgabe:
Array
(
[test] => // Pfade ohne Tiefe
[sdhfgsdhkgf] => // Pfade ohne Tiefe
[test3] => // Pfade ohne Tiefe
[verz0] => Array
(
[verz2] => // hier ist der Hund begraben warum verz2 ??????
[verz1] => Array
(
[verz2] =>
)
)
)
Ich hab das ganze mal mit 6 Pfaden für euch:
array
(
[0] = verz0
[1] = verz1
[2] = verz2
[3] = verz3
[4] = verz4
[5] = verz5
)
Ausgabe :
Array
(
[verz0] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
[verz3] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
)
[verz2] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
[verz3] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
)
)
[verz1] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
[verz3] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
)
[verz2] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
[verz3] => Array
(
[verz5] =>
[verz4] => Array
(
[verz5] =>
)
)
)
)
)
)
so ich denke jetz ist das ganze verständlicher oder auch nicht.
OK ich habs selber rausgefunden:
$ct = count($path)-1;
$ct_tmp = $ct;
// Ordner nur eine Ebene tief
if($ct == 0) { $tmp[$path[$ct_tmp]] = ""; }
// Ordner mehrere Ebenen tief
else
{
while($ct_tmp != -1)
{
// Erster durchlauf / letzter Ordner
if($ct_tmp == $ct) { $tmp2 = array( "$path[$ct_tmp]" => ""); }
// Zwishendurchlauf
else if($ct_tmp != 0)
{
$tmp2["$path[$ct_tmp]"] = $tmp2;
unset($tmp2[$path[$ct_tmp+1]]); // <--- !!!!!!!!!!!!!!!!
}
// letzter durchlauf
else
{
$tmp["$path[$ct_tmp]"] = $tmp2;
}
$ct_tmp--;
}
}