Möchtest du die Array auch mit Inhalt füllen, oder machst du das per Hand?
Auslesen kannst du sie so (gehen wir davon aus, dass sie als „$array“ gespeichert ist):
<?php
foreach($array as $usekey =>$arrayvalue){
print $arrayvalue[playlist index];
}
?>
oder so:
<?php
foreach($array as $usekey =>$arrayvalue){
foreach($arrayvalue as $usearraykey =>$usearrayvalue ){
print $usearraykey.": ".$usearrayvalue;
}
}
?>
Vielen Dank für eure Tipps. Wenn ich das richtig verstehe dann komme ich mit paresys Ansatz dort hin wo ich will, muss es halt nur um die entsprechenden Chunks erweitern.
Ich hatte sowas ähnliches (wie paresy) gemacht. Ich wollte eine Liste als Objekt-Konstruktion interpretieren.
Um da ganz dynamisch und unabhängig von jeder Kennung zu sein, die ein Objekt „einleitet“ (hier: „playlist index“) habe ich - anders als paresy - den Objektkenner plus Objektname (hier „playlist index“ & nr) als ersten Key eines assoziativen Arrays genommen. Die Keys der zweiten Ebene beschreiben dann das Objekt (hier: id, title, genre etc).
Musst nur nch Dein Array in der Zeite $ARRAY = ?? einsetzen.
// ARRAY TO CONTAIN THE OBJECTS DEFINITION & CONTENTS
$ARRAY = ?? // MODIFY HERE
print_r( ACVITI_ListToObject( $ARRAY, ":" ) );
function ACVITI_ListToObject( $arr, $deli = "|" )
{
// DEFINE OBJECTS ARRAY --> EACH OBJECT WILL BE ONE ARRAY ELEMENT
// WITH PROPERTIES BEING THE ARRAY ON SECOND LEVEL
// FIRST LINE DEINES THE START-IDENTIFIER OF EACH OBJECT
$f['deli'] = $deli;
$f['arr'] = $arr;
$f['ObjectsArr'] = Array();
// WALK ALL DEFINITION LINES
$i = 0;
foreach($arr as $f['arr_item'])
{
$f['items'] = explode($f['deli'], urldecode($f['arr_item']));
if( count( $f['items'] ) == 1 )
{
$f['key'] = $f['items'][0];
$f['value'] = "";
}else{
$f['key'] = $f['items'][0];
$f['value'] = $f['items'][1];
};
// FIRST LINE DEFINES THE RECURRING START-IDENTIFIER FOR OBJECTS
if( $i==0 )
{
$f['NewObjectIdentifier'] = $f['key'];
};
if($f['key'] == $f['NewObjectIdentifier'])
{
// START A NEW OBJECT INDEX IN OBJECTS ARRAY
$f['ObjectName'] = $f['key'] . " " . $f['value'];
}else{
// SUPPLY PROPERTIES OF OBJECT ONE BY ONE
$f['ObjectsArr'][ $f['ObjectName'] ][ $f['key'] ] = $f['value'];
};
$i++;
};
//end WALK ALL DEFINITION LINES
return( $f['ObjectsArr'] );
};
Bloss, weil ich gerne mit Arrays statt Variablen arbeite (das hat beim debug den großen Vorteil, dass print_r alles mit einer einzigen code-Zeile ausgibt) ist das doch alles noch nicht komplex! Es ist ne einfache Loop …
Ok, da die Funktion ne allgemeine sein sollte (ich mache nach Möglichkeit immer wiederverwendbaren code), braucht’s halt schon mal ein paar Zeilen „mehr“ - aber wenn Du die Definition der „Kennung neu“, den Doppelpunkt als variablen Trenner und die Kommentare weglässt, ist der Code unwesentlich länger als die andern codes hier …
Du musst im Prinzip nur $f[ (functiondata) nicht lesen … schon ist’s wie wenn Du ne Variable nutzen würdest. Da sich das $f[ machmal auf den ersten Blick wie ein „if“ liest, nehme ich inzwischen $af[ …
Ob etwas komplex ist oder nicht liegt immer im Auge des Betrachters
Bis dato habe ich mehrdimensionale Array nur gelesen, aber selbst eines über eine Schleife erzeugen hatte ich noch nie gemacht, deshalb im ersten Schritt ein wenig komplex für mich.
Ich hatte Anfangs auch ein bisschen „Regatt“ vor Arrays.
Aber ich kann jedem wirklich nur empfehlen, sich mal die Zeit zu nehmen (ein oder zwei Stunden reichen übrig), mit Arrays rumzuspielen und sich klar zu machen, wie die funktionieren. Es ist genial einfach und hilft ungemein, wenn man etwas umfangreichere Daten hat.
Auch die Arrayfunktionen könneneinem das Leben in vielen Fällen wesentlich erleichtern und ellenlange Litaneien auf wenige Codezeilen reduzieren.
Mal sehen, vielleicht finde ich mal ein paar Minuten Muse, um ein Tutorial zu schreiben. Vielleicht hilft das ja vielen hier (gibt es daran Interesse ???). Ich hatte bislang den Eindruck, dass ich der einzige war, der vor Arrays zurückgeschreckt ist …
Das Konstrukt $a = &$b; ist hier die ganze Magie, die das Skript so kurz macht. Ist vielleicht Wert sich mal mit Referenzen und PHP auseinander zu setzen, wer das Konzept verstehen willt
Grüße aus dem total eingeschneiten Sarkwitz,
paresy
Das war so nicht gemeint :D. Aber mir war es eine Ehre helfen zu können. Deine Frage hätte man aber auch anders lösen können. Weniger High-Tech, mit aber mehr Zeilen Mein Satz war nur für dich gedacht, damit du meine Lösung nachlesen kannst, falls dich interessiert, was es mit dem & auf sich hat
Fragen kann doch hier jeder. Sogar ich tue das manchmal