I saw several variations of this nested UL array question in stackoverflow, but I find mine easier than others. I am looking for a simple cycle loop that allows you to resolve an infinite number of topics (parents) with an infinite number of elements (children), for example:
<ul> <li>Topic</li> <ul> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> </ul> </ul>
I tried to do this with the following code:
<?php $result = mysql_query("SELECT * FROM News"); $topicname = false; while($row = mysql_fetch_array($result)) { if (!$row['TopicID']) { $row['TopicName'] = 'Sort Me'; } if ($topicname != $row['TopicName']) { echo '<ul><li>' . $row['TopicName'] . '</li><ul>'; $topicname = $row['TopicName']; } echo ''; echo '<li>' . $row['NewsID'] . '"</li>'; echo ''; } if ($topicname != $row['TopicName']) { echo '</ul>'; $topicname = $row['TopicName']; } ?>
The above code displays the following:
* Topic A o News 1 o News ... o News 51000 + Topic B
I would like the code to display the following:
* Topic A o News 1 o News ... o News 51000 * Topic B o News 1 o News ... o News 51000 * Topic C o News 1 o News ... o News 51000 * Topic D o News 1 o News ... o News 51000
Any ideas would be greatly appreciated!
QUESTION RESOLVED BY BRAND; can this related issue be resolved?
Hi Mark: Yes, it did the trick! Very helpful, thanks. I was wondering if you can help me translate this to another level of difficulty. If you think you should not ask a question in this question, let me know and I will ask separately, but your code is strong, so I thought that I would follow it.
Using the same code above, I hope to provide the user with the ability to view data on a choice of 1 column, 2 columns, 3 columns, 4 columns, 5 columns, etc. (to 10). The data lines will be divided into separate DIV tags, and the number of lines will include both topics and news items. I will control the DIV tags using my CSS, but I would like to group the row count evenly into DIV tags for the specified number of columns. I would like children’s news articles not to be separated from their parents and groups in order to be as large as possible. If there is a breakpoint at which 1 column can be longer than the other, and it is equal / arbitrary, the priority will go to the leftmost column, for example: this mini-illustration:
XXX XX X
I do not know how clear this is, so here is an example. If the user selects 1 column, they will see the following 30 "rows" of data:
<div id="Columns1Group1of1"> * Topic A o News 1 o News 2 o News 3 * Topic B o News 1 o News 2 o News 3 o News 4 * Topic C o News 1 o News 2 o News 3 o News 4 o News 5 * Topic D o News 1 o News 2 o News 3 * Topic E o News 1 o News 2 o News 3 o News 4 * Topic F o News 1 o News 2 o News 3 o News 4 o News 5 </div>
If the user selects 2 columns, they will see the next 30 “rows” of data, divided into 2 groups with DIV tags wrapped around each. This happens to space outside by coincidence:
<div id="Columns2Group1of2"> <div id="Columns2Group2of2"> * Topic A * Topic D o News 1 o News 1 o News 2 o News 2 o News 3 o News 3 * Topic B * Topic E o News 1 o News 1 o News 2 o News 2 o News 3 o News 3 o News 4 o News 4 * Topic C * Topic F o News 1 o News 1 o News 2 o News 2 o News 3 o News 3 o News 4 o News 4 o News 5 o News 5 </div> </div>
If the user selects 3 columns, they will see the next 30 “rows” of data, divided into 3 groups with DIV tags wrapped around each. The interval starts to get complicated, and I'm open to suggestions.
<div id="Columns3Group1of3"> <div id="Columns3Group2of3"> <div id="Columns3Group3of3"> * Topic A * Topic C * Topic E o News 1 o News 1 o News 1 o News 2 o News 2 o News 2 o News 3 o News 3 o News 3 * Topic B o News 4 o News 4 o News 1 o News 5 * Topic F o News 2 * Topic D o News 1 o News 3 o News 1 o News 2 o News 4 o News 2 o News 3 </div> o News 3 o News 4 </div> o News 5 </div>
If the user selects 4 columns, they will see the next 30 “rows” of data, divided into 4 groups with DIV tags wrapped around each. Again, I don’t even know how to manually place this for illustration, but it is important that the children remain under the parent.
<div id="Columns4Group1of4"> <div id="Columns4Group2of4"> <div id="Columns4Group3of4"> <div id="Columns4Group4of4"> * Topic A * Topic C * Topic D * Topic F o News 1 o News 1 o News 1 o News 1 o News 2 o News 2 o News 2 o News 2 o News 3 o News 3 o News 3 o News 3 * Topic B o News 4 * Topic E o News 4 o News 1 o News 5 o News 1 o News 5 o News 2 </div> o News 2 </div> o News 3 o News 3 o News 4 o News 4 </div> </div>