$data=
array(
1 => array(
'title' => 'top',
'url' => 'http://○○.com/',
'sub' => array(
11 => array(
'title' => '商品TOP',
'url' => '/syohin/syouhin.html',
'sub' => array(
111 => array('title' => '商品詳細',
'url' => '/syohin/syohin_search'),
)
)
)
),
2 => array(
'title' => '会社案内',
'url' => '/company/index.htm'
)
);
配列が入れ子状態になっているので再帰にすると簡単だと思います。
function topic_list($data) { foreach ($data as $name=>$list) { echo '<a href="'.$list['url'].'">'.$list['title'].'</a>'; if (isset($list['sub'])) { echo ' > '; topic_list($list['sub']); } else echo "<br>\n"; } } topic_list($data);
入れ子状態にするよりは二次元配列のイメージにした方がわかりやすいと思います。
$data= array( array( array('title' => 'top','url' => 'http://○○.com/'), array('title' => '商品TOP','url' => '/syohin/syouhin.html'), array('title' => '商品詳細','url' => '/syohin/syohin_search')), array( // array(), // tableでの位置合わせ用 array('title' => '会社案内','url' => '/company/index.htm')) ); function topic_list($data) { foreach ($data as $row) { foreach ($row as $id=>$list) echo (($id) ? ' > ' : ''). '<a href="'.$list['url'].'">'.$list['title'].'</a>'; echo "<br>\n"; } }
また会社案内が先頭から始まるのはおかしいように思いテーブルにしてみました。
会社案内の手前に位置合わせのたるにダミーの配列array()を追加して確認する必要があります。
function topic_list_table($data) { echo '<table>'; foreach ($data as $row) { echo '<tr>'; foreach ($row as $id=>$list) echo '<td>'.(($id) ? ' > ' : ''). '<a href="'.$list['url'].'">'.$list['title'].'</a></td>'."\n"; echo '</tr>'; } echo '</table>'; }