2012-12-15 5 views
6

Ich habe folgende Array:schaffen ul und li ein mehrdimensionales Array in PHP mit

tree_array $

Wenn ich ein var_dump tun, erhalte ich:

array(6) { 
    [0]=> string(23) "$100,000 Cash Flow 2013" 
    [1]=> array(6) { 
     [0]=> string(1) "2" ["Goal_ID"]=> string(1) "2" 
     [1]=> string(13) "Sell Iron Oak" ["Opportunity"]=> string(13) "Sell Iron Oak" 
     [2]=> string(2) "10" ["OID"]=> string(2) "10" 
    } 
    [2]=> array(2) { 
     [0]=> string(32) "ask her if she would like to buy" ["Activity"]=> string(32) "ask her if she would like to buy" 
    } 
    [3]=> array(6) { 
     [0]=> string(1) "2" ["Goal_ID"]=> string(1) "2" 
     [1]=> string(8) "Sell Car" ["Opportunity"]=> string(8) "Sell Car" 
     [2]=> string(2) "11" ["OID"]=> string(2) "11" 
    } 
    [4]=> array(2) { 
      [0]=> string(52) "Call Roy back to see if he would like to purchase it" ["Activity"]=> string(52) "Call Roy back to see if he would like to purchase it" 
    } 
    [5]=> array(1) { 
     ["tot_opp"]=> NULL 
    } 
} 

Mein Endziel ist es, Erstellen Sie ungeordnete Listen und Listen (ul, li) mit diesen Daten. Es werden mehr Daten zum Array hinzugefügt, wenn die Datenbank aktualisiert wird, damit sie weiter wächst. Mein Ziel ist es, das Array durchzulaufen und den folgenden Code zu erstellen, damit ich bei wachsenden Datenmengen weiterhin Listen erstellen kann. Ich bin neu in PHP und nicht sicher, wie dies zu erreichen ist.

<ul> 
<li>$100,000 Cash Flow 2013</li> 
<ul> 
<li>Sell Iron Oak</li> 
<ul> 
<li>ask her if she would like to buy</li> 
</ul> 
<ul> 
<li>Sell Car</li> 
</ul>etc... 

Jede Hilfe wird sehr geschätzt! Vielen Dank im Voraus!

Antwort

1

Scheint wie eine einfache genug Rekursion zu mir:

function arrayToList($in) { 
    echo "<ul>"; 
    foreach($in as $v) { 
    if(is_array($v)) arrayToList($v); 
    else echo '<li>' . $v . '</li>'; 
    } 
    echo "</ul>"; 
} 

Es sieht aus wie Sie dort einige doppelte Werte haben. Verwenden Sie mysql_fetch_array? Sie sollten mysql_fetch_assoc oder mysql_fetch_row verwenden, abhängig davon, ob Sie ein assoziatives oder indiziertes Array benötigen.

+0

Diese Vorschläge sind beide großartig. Das Problem, das ich habe, ist, dass die Listen tief wachsen werden. Es gibt eine Zieltabelle und eine Opportunity-Tabelle, aus der die Daten in mysql abgerufen werden. Daher könnte direkt unter einem Ziel ein Kind/Sub-Ziel oder eine Chance sein. Zum Beispiel: 100.000 Einkommen => 30.000 vom Job (das ist ein Ziel) 100.000 Einkommen => verkaufen Miethaus an Bob (das ist eine Chance). Wenn die Kinderziele tiefer in die Tiefe gehen, können Kinderziele mit ihnen verknüpft werden und Chancen bestehen. – m1e1b1

+0

Außerdem habe ich die Arrays in assoc geändert. Hier ist die Ausgabe, die ich jetzt vom Dump bekomme: array (6) {[0] => string (23) "$ 100.000 Cash Flow 2013" [1] => array (3) {["Goal_ID"] => string (1) "2" ["Opportunity"] => string (13) "Eiseneiche verkaufen" ["OID"] => string (2) "10"} [2] => array (1) {["Activity "] => string (32)" frage sie, ob sie kaufen möchte "} [3] => array (3) {[" Goal_ID "] => string (1)" 2 "[" Opportunity "] => string (8) "Auto verkaufen" ["OID"] => string (2) "11"} [4] => array (1) {["" Activity "] => string (52)" Rufe Roy zurück, um zu sehen wenn er es kaufen möchte "} [5] => array (1) {[" tot_opp "] => NULL}} – m1e1b1

+0

Vielen Dank für die Hilfe übrigens! Ihr beide habt mich übersprünge hinaus gebracht, wo ich war! – m1e1b1

1

Sie benötigen dafür eine rekursive Funktion, keine Schleife. Auf diese Weise wird jede Tiefe Ihres Quell-Arrays behandelt.

function make_list($arr) 
{ 
    $return = '<ul>'; 
    foreach ($arr as $item) 
    { 
     $return .= '<li>' . (is_array($item) ? make_list($item) : $item) . '</li>'; 
    } 
    $return .= '</ul>'; 
    return $return; 
} 
echo make_list($source_array); 
+0

Diese Vorschläge sind beide großartig. Das Problem, das ich habe, ist, dass die Listen tief wachsen werden. Es gibt eine Zieltabelle und eine Opportunity-Tabelle, aus der die Daten in mysql abgerufen werden. Daher könnte direkt unter einem Ziel ein Kind/Sub-Ziel oder eine Chance sein. Zum Beispiel: 100.000 Einkommen => 30.000 vom Job (das ist ein Ziel) 100.000 Einkommen => verkaufen Miethaus an Bob (das ist eine Chance). Wenn die Kinderziele tiefer in die Tiefe gehen, können Kinderziele mit ihnen verknüpft werden und Chancen bestehen. – m1e1b1

+0

Das macht die Funktion, wenn Sie Elemente in Ordnung halten. Das heißt, wenn ein Element mit einem Ziel von einem Element mit Childs/Sub-Zielen gefolgt wird, wird es natürlich aussehen, nicht wahr? – Ranty