2013-01-09 26 views
0

基本上我想我的组数组是这样的:集团PHP数组的键值

Shopping 
    Amazon 
Social 
    Amoeblo 
    American express 

使用下面的PHP代码:

<?php 

echo '<ul id="list"><h2 class="searchresults"></h2>'; 
foreach($records as $catval) { 
    $sitechar = $catval->site_category; 
    echo '<h3 id="disappear">'. strtoupper($sitechar) .'</h3>';  
    echo '<li class="siteli"><a href="#" class="add">'; 
    echo '<p id="text-site">'.$catval->site_name. '</p></a>'; 
    echo '</li>'; 
} 
echo '</ul>'; 
?> 

但我发现了值仅低于一样。

Shopping 
     Amazon 
Social 
     Amoeblo 
Social 
     American express 

我没有得到确切的PHP排序用于此。

+0

尽量把变量$ last_category总是存储您的最后一个父类。然后在显示父类别之前将其与最后显示的一个进行比较..如果它们相同,则不要再次显示它。如果您遇到问题,请在此处发布代码。 –

+2

你可以显示你用来检索数据的数据库查询吗?请把它编辑成你的问题。 – halfer

+0

如果不工作,你为什么接受它? http://stackoverflow.com/questions/14233428/group-php-array-by-key-value – PedroGabriel

回答

2

做我会创建一个新的数组,其类别是与网站阵列的关键字。

<?php 
$arr = array(); 

// First create multidimensional array with categories as keys for site arrays 
foreach($records as $catval) { 
    $sitechar = $catval->site_category; 
    if (!array_key_exists($sitechar, $arr)) { 
     // Set new array for a category if it does not exist 
     $arr[$sitechar] = array(); 
    } 

    // Add site to category 
    $arr[$sitechar][] = array(
     "name"=>$catval->site_name, 
     "image"=>$catval->site_img 
    ); 
} 

// Then iterate the new array of categories 
echo ("<ul>"); 
foreach($arr as $category => $sites) { 
    echo("<h3>" . $site_category "</h3>"); 

    // Iterate array of sites 
    foreach($sites as $site) { 
     echo("<li>" . $site["name"] . "-" , $site["image"] . "</li>"); 
    } 
} 
echo("</ul>"); 
?> 
+0

谢谢Ebsen ...它的工作.. – Carolina

1

您可以使用foreach和ksort

设$ your_array是你在上面

$res_array = array(); 
foreach($your_array as $val){ 
    $res_array[$val->site_category][] = $val->site_name; 
} 
ksort($res_array); 

print_r($res_array); 

提到的阵列或搜索PHP multisort这将解决您的问题:)

+0

似乎合法huh – PedroGabriel

0
$tmp = null; 

    echo '<ul id="list"><h2 class="searchresults"></h2>'; 
    foreach($records as $catval) { 
     $myHtml = makeHtml($catval,$tmp); 
     echo $myHtml; 
     $tmp = $catval->site_category; 
    } 
    echo '</ul>'; 


function makeHtml($catval,$tmp){ 
     if($tmp != $catval->site_category){ $html .= '<h3 id="disappear">'. strtoupper($catval->site_category) .'</h3>';} 
     $html .='<li class="siteli"><a href="#" class="add"><p id="text-site">'.$catval->site_name. '</p></a></li>'; 
     return $html; 
}