非常基本的问题..但我忽略了这一点......我的表上有这些数据:
ID SITEID SECTION
1 1 posts
2 2 posts
3 1 aboutme
4 1 contact
5 2 questions
输出是一个数组。我无法改变它。
我想在php上使用该数组的单个for循环来输出:
<h1> sections for site 1 </h1>
posts
aboutme
contact
<h1>sections for site 2 </h1>
posts
questions
我正在尝试做这样的事情,其中$ sectionsArray是我的输出。我想检查siteid是否相同,然后进行循环..
for ($j = 0; $j < sizeof($sectionsArray); $j++) {
while (siteid == 1) {
echo '<h1>' . $sectionsArray['siteid'] . '</h1>';
}
echo "<a href='section.php?id=' . $sectionsArray['id'] . ' '">' . $sectionsArray['section'] . '</a>;
}
但我没有得到一段时间“分组”结果的逻辑...... INSIDE一个循环。欢迎任何光明。
谢谢
答案 0 :(得分:1)
假设您无法更改查询,仅使用1个循环就无法实现此功能。当for
循环遍历$sectionsArray
时,您必须在遇到它时处理每一行。如果你只想要网站1的部分,你仍然会遇到网站2,3等的部分并不重要。要么忽略它们,要么处理它们。
如果您可以更改查询,请按SITEID
订购,然后按ID
订购。这将按站点对所有部分进行分组(注意:这与使用SQL GROUP BY
语句不同)。
如果您无法更改查询,请使用for循环迭代$sectionsArray
一次。在该循环中,构建第二个数组,其中不同的部分按站点ID排序。遍历第二个数组以输出现在处于站点id顺序的所有部分。
答案 1 :(得分:1)
又快又脏;)
<?php
$arr = array(
array('id' => 1, 'site_id' => '1', 'section' => 'posts'),
array('id' => 2, 'site_id' => '2', 'section' => 'posts'),
array('id' => 3, 'site_id' => '1', 'section' => 'aboutme'),
array('id' => 4, 'site_id' => '1', 'section' => 'contact'),
array('id' => 5, 'site_id' => '2', 'section' => 'questions')
);
$htmlStrings = array();
$curr_site_id = '0';
foreach($arr as $item)
{
if ( $item['site_id'] != $curr_site_id )
{
$curr_site_id = $item['site_id'];
if ( !isset($htmlStrings[$curr_site_id]) ) $htmlStrings[$curr_site_id]['header'] = '<h' . $curr_site_id . '>Sections for site ' . $curr_site_id . '</h' . $curr_site_id . '>';
$htmlStrings[$curr_site_id]['content'] .= '<br />' . $item['section'];
}
else
{
$htmlStrings[$curr_site_id]['content'] .= '<br />' . $item['section'];
}
}
foreach($htmlStrings as $section)
{
echo $section['header'];
echo $section['content'];
}
答案 2 :(得分:0)
如果你想对数组进行一次传递,首先进行排序(从技术上讲,这也是一个传递!),然后在循环时检查siteid的变化。以下是在循环之前可以通过siteid对数组进行排序的方法:
$sections = array(
array('id'=>1, 'siteid'=>1, 'section'=>'posts'),
array('id'=>2, 'siteid'=>2, 'section'=>'posts'),
array('id'=>3, 'siteid'=>1, 'section'=>'aboutme'),
array('id'=>4, 'siteid'=>1, 'section'=>'contact'),
array('id'=>5, 'siteid'=>2, 'section'=>'questions'),
);
usort($sections, 'sortBySiteId');
function sortBySiteId($a, $b)
{
if ($a['siteid'] == $b['siteid']) {
return 0;
}
return ($a['siteid'] < $b['siteid']) ? -1 : 1;
}
答案 3 :(得分:0)
谢谢..但我最终这样做了:
for ($j=0;$j<sizeof($sectionArray);$j++) {
$section_id = $sectionArray[$j]['id'];
$section_name = $sectionArray[$j]['secao'];
echo '<div id="menu">';
echo '<div class="section">'.$section_name.'</div>';
$categoryArray = $objectCategory->listCategory($section_id); // return my array from db
for ($ii=0;$ii<sizeof($categoryArray);$ii++) {
$categoryId = $categoryArray[$ii]['id'];
$categoryName = $categoryArray[$ii]['category'];
echo "<div class=\"item\">";
echo "<a href=\"category.php?id=$categoryId\">$categoryName</a>";
echo "</div>";
}
echo '</div>';
}
可以吗?我的意思是,我对数组有一些问题...... :(
但无论如何,谢谢