2013-05-25 41 views
0

我有一个返回数据库结果像这样的功能:分类的MySQL结果阵列

<?php print_r($homepagematches; ?> 
Array 
(
[0] => Array 
    (
     [matchid] => 30 
     [matchtitle] => Testing This! 
     [matchaverage] => 1 
     [matchyoutubecode] => New Match 
     [casterid] => 1 
     [matchtype] => 
     [matchdate] => 2013-05-24 02:19:49 
     [matchcasteryoutube] => http://youtube.com/huskystarcraft 
     [matchcaster] => HuskyStarcraft 
    ) 

[1] => Array 
    (
     [matchid] => 27 
     [matchtitle] => Psy vs Camara 
     [matchaverage] => 1 
     [matchyoutubecode] => nefC9vkMfG8 
     [casterid] => 1 
     [matchtype] => 
     [matchdate] => 2013-05-24 02:13:10 
     [matchcasteryoutube] => http://youtube.com/huskystarcraft 
     [matchcaster] => HuskyStarcraft 
    ) 

该函数返回内最近3天内的所有比赛中,我试图找出是如何数组改革,我可以在发布日期之前显示比赛。我知道一个foreach循环可能需要这个,我只是无法理解我需要实现的概念。

$matchdate = ''; 
foreach($this->data['homepagematches'] as $match){ 
    if($matchdate != date('m/d', strtotime($match['matchdate'])) || $matchdate == ''){ 
    $homematch[date('m/d', strtotime($match['matchdate']))] = array(
    "matchtitle" => $match['matchtitle']); 
    } 

基本上我需要的阵列看起来像:

Array 
(
[05/24] => Array 
     (
       [matchid] =>30 
       [matchtitle] => Testing This! 
       [matchyoutubecode] => New Match 
       [casterid] = 1 
     ) 
) 
+0

或者您可以查询'matchdate'字段并仅提取正确的结果。这种方式对MySQL的压力较小(不会返回太多结果),也不需要编写php代码来完成mysql应该完成的任务。 – Twisted1919

+0

我收到了正确的结果。查询只返回确实会显示的行。你是说,而不是一个查询在过去3天内拉动所有匹配,我需要有三个不同的查询,每个查询都在某一天,即今天,昨天......。这似乎是服务器处理的更多负载。谢谢你快速的回复! :) –

回答

0

我想这应该这样做。

foreach($this->data['homepagematches'] as $match){ 
    $tag = date('m/d', strtotime($match['matchdate'])); 
    $data[$tag][] = array(
     "matchid" => $match['matchid'], 
     "matchtitle" => $match['matchtitle'], 
     "matchyoutubecode" => $match['matchyoutubecode'], 
     "casterid" => $match['casterid'] 
    ); 
} 
print_r($data); 
+0

非常感谢Andy。正是我需要的。你是老板! –

0
<?php 
$MatchesByDate = array(); 
foreach($homepagematches as $match) { 
    list($matchdate,$time) = explode(" ",$match["matchdate"]); //split field into date and time 
    if(!isset($MatchesByDate[$matchdate])) 
     $MatchesByDate[$matchdate] = array(); // If the array for that date doesnt exist yet make it 
    $MatchesByDate[$matchdate][] = $match; //Use the matchdate as a key and add to the array 
}