2012-12-15 11 views
6

私は、次の配列を持っている:は、PHPの多次元配列を使用して、ULとLiを作成

$ tree_array

私はのvar_dumpを行うと、私が手:

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 
    } 
} 

私の最終目標はにあります順序付けられていないリストとリスト(ul、li)をこのデータで作成します。データベースが更新されると、アレイに追加されるデータが増えるため、増え続けるでしょう。私の目標は、配列をループして、次のコードを作成し、データの増加に合わせてリストを作成し続けることです。私はPHPに新しいとこれを達成する方法を確認していない。

<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... 

ご協力いただければ幸いです。前もって感謝します!

答えて

1

は、私には、単純な十分な再帰のように思える:

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

あなたがそこまでいくつかの重複した値を持っているように見えます。 mysql_fetch_arrayを使用していますか?連想配列または索引配列が必要かどうかによって、mysql_fetch_assocまたはmysql_fetch_rowを使用する必要があります。

+0

これらの提案はどちらも優れています。私が持っている問題は、リストが深く成長することです。データがmysqlから引き出される目標テーブルと機会テーブルがあります。したがって、目標の直下は、子/副目標または機会になる可能性があります。例:100,000人の収入=> 30,000人(これは目標)100,000人の収入=>ボブにレンタルハウスを売る(これは機会です)。さらに、子供の目標が深く掘り下げられるにつれて、彼らは子供の目標を彼らに与え、機会を与えることができます。 – m1e1b1

+0

また、配列をassocに変更しました。 array(6){[0] => string(23) "$ 100,000 Cash Flow 2013" [1] =>配列(3){["Goal_ID"] =>文字列(1) "2" ["Opportunity"] => string(13) "Iron Oak"を売る["OID"] => string(2) "10"} [2] => array(1){["アクティビティ(3){["Goal_ID"] =>ストリング(1) "2" ["Opportunity"] =>ストリング(32) "ロイ"を見に戻ってコールしてください。( "OID" => string(2) "11"} [4] => array(1){["Activity"] =>もし彼がそれを購入したいと思ったら "} [5] => array(1){[" tot_opp "] => NULL}} – m1e1b1

+0

途中で助けてくれてありがとう!あなたは私がどこにいたのか、私は両方を飛び越えました! – m1e1b1

1

ループではなく、再帰的な関数が必要です。このようにして、ソース配列の任意の深さを処理します。

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

これらの提案は両方とも素晴らしいです。私が持っている問題は、リストが深く成長することです。データがmysqlから引き出される目標テーブルと機会テーブルがあります。したがって、目標の直下は、子/副目標または機会になる可能性があります。例:100,000人の収入=> 30,000人(これは目標)100,000人の収入=>ボブにレンタルハウスを売る(これは機会です)。さらに、子供の目標が深く掘り下げられるにつれて、彼らは子供の目標を彼らに与え、機会を与えることができます。 – m1e1b1

+0

これは、要素を順序どおりに保持する場合に関数が行うことです。つまり、目標を持つ要素の後に子/副目標を持つ要素が続く場合、自然に見えるでしょうか? – Ranty