根据键的值将数组拆分成较小的数组?

3
我在网站上执行了一个关键字搜索,得到了来自mysql的搜索结果。它们按会员等级(0-3)排序。然而,我需要以不同于彼此的方式显示这些等级 - 就像等级3比其他等级更突出。我考虑将行拆分为单独的数组。所以,例如,array0将包含所有排名为0的行,依此类推。然后循环遍历这些数组以显示结果。但是我完全不知道如何做到这一点 - 拆分数组成较小的数组。
(作为参考,我找到了这个问题:splitting a large array into smaller arrays based on the key names 但我不确定那是否是我需要的...也许该问题的某些澄清会对此有所帮助?)
例如,这里是我的数组:
Array ( 
     [rank]         => 3 
     [organization] => Test Company 
     [imagecompany] => 1636.gif 
     [website]      => http://www.google.com 
     [phone]        => 344-433-3424 
     [fax]          => 
     [address_on_web] => physical   
     [address] => 2342 Test Ave 
     [city] => York 
     [stateprov] => WA 
     [postalcode] => 00000 
     [address_mailing] => 2342 Test Ave 
     [city_mailing] => Seattle 
     [state_mailing] => WA 
     [zip_mailing] => 00000 
     [description] => 'Test test Test test Test test Test test Test 

test Test test Test test Test test Test test Test test Test test Test test Test test 

Test test Test test'
     [customerid] => 1636 ) 

1
对于纯数组分割,您可以使用array_chunk(),但我想您需要更多的重新组织而不是分割。执行循环并将结果保存到另一个数组中,也许像Wesley van Opdorp建议的那样。 - Elzo Valugi
你不必将它们分开。它们按成员等级排序,因此您只需运行一个foreach,如果当前等级与上一个不同,则应用不同的格式。 - kapa
@bazmegakapa,我之前也是这样设置的,但是有些格式差别很大。 - Sara
简单地打破循环,然后从上一个循环结束的地方开始新的循环。 - kapa
3个回答

13

您可以使用排名作为键来创建一个多维数组,例如:

$aRanks = array();
foreach($aArray as $aEntry) {
    $aRanks[$aEntry['rank']][] = $aEntry;
}
echo '<pre>';
print_r($aRanks);

3
我有一个通过关键词搜索得到的MySQL搜索结果。然后使用数据库/SQL进行排序,而不是使用PHP。这样更快并且使用的代码更少。

不总是这样。例如,在我的情况下,我需要合并两个表中的数据。PHP似乎更容易使用。 - Tebe
1
假设,例如OP想要按RANK排序,并将前3个值放在顶部,那么在SQL中,这意味着添加“ORDER BY IF(rank=3, -1, rank)” 。大约27个字符,2个指令。或者可能是一个简单的降序数字排序,其中“3”是顶部值:“ORDER BY rank DESC”(19个字符,一个带有修饰符的指令)。如果您能用更少的代码和/或更少的指令在PHP中实现这一点,我会非常印象深刻。 - symcbean

0
$query = mysql_query(); // your query here 
$result = mysql_fetch_array($query);
foreach($result as $row){
  switch($row['rank']){
    case 3: 
    // statement to apply formatting, add to each case
    // example:
    echo "<span style="color:red;">;
    break;
    case 2: break;
    case 1: break;
  }
}

然后输出每一行,当你想要结束格式化时,回显关闭的</span>(或div或其他内容)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接