2013-05-02 67 views
0

我正在特定日期合并这两个数组。如果两个数组都有相同的日期,那么它会合并数组&,在图上绘制该数组。但问题是,它正在合并数组&只在条的开头附加条而不是在两个日期相等的特定日期。例如对于例如 在特定日期汇总两个数组(如果两个日期匹配)

array1 = (18/03/2013 => 10, 20-03-2013 => 6, 21-03-2013 => 10); 
array2 = (20-03-2013 => 5); 

。所以它应该在20-03-2013附加吧,但实际上它只在开始时附加吧,即18-03-2013

plz帮助我在此先感谢

听到的是我的代码

// gives the how many calls has came per day 
$count = __Select("tbl_call_master","COUNT(DATE(date_time)) AS call_count , DATE(date_time)AS date ","WHERE DATE(date_time) BETWEEN  '$from_date' AND '$to_date' GROUP BY DATE(date_time) "); 

$get_first_array=array(); //created the array to store the result 


while($row = mysql_fetch_array($count)) 
{ 
    // daily records are been saved in record1[] array 
    $record1[]= array(
     $row['date'], 
     $row['call_count'] 
    ); 

} 
// gives the how many calls has came per day where status is WIP(work in progress) 
$wip= __Select("tbl_call_master","COUNT(DATE(date_time)) AS call_count , DATE(date_time) AS date ","WHERE status= 'WIP' AND DATE(date_time) BETWEEN '$from_date' AND '$to_date' GROUP BY DATE(date_time) "); 

while($row= mysql_fetch_array($wip)) 
{ 
    //daily records are been saved in wiprecord[] array 
    $wiprecord[]= array(
     $row['date'], 
     $row['call_count'] 
    ); 

} 
$chk=0; 
// foreach runs till the records are there 
foreach ($record1 as $key=> $value) { 

// it will $chk is 1 if 
    if($chk==1){ 
     $get_first_array[$key] = $record1[$key]; //this record1 is gets transfer in another array which i am going to show in graph 
    } 
//foreach runs till the wiprecords are there  
foreach ($wiprecord as $key=> $value1) { 


end($wiprecord);// it will give the last index of wiprecord 

    $last=key($wiprecord); // last index is stored in last variable 
    if($key==$last){ // if key is last then it will make the $chk to 1 
     $chk=1; 
    } 
    if($value[0] == $value1[0]) // checks whether date of record1 & date of wiprecord equals then it will enter in the condition 
    { 
     array_push($record1[$key], $wiprecord[$key][1]); // this will put the contents in record1[] 
     $get_first_array[$key] = $record1[$key]; // this record1 is gets transfer in another array 
     print_r($get_first_array[$key]); 
    } 
} 
} 
+0

太复杂了... !!!你能否添加评论! – 2013-05-02 12:00:39

+0

好吧现在检查一下我已经做了更改 – swapnil 2013-05-02 12:16:23

+0

对于'foreach'你都使用'$ key'!你确定你没有使用'foreach($ key1作为$ key => $ value)''在嵌套'foreach($ wiprecord作为$ key => $ value1)中使用'$ key' – 2013-05-02 12:24:43

回答

0

我更改了代码:

  1. 删除$chk和if条件。
  2. 增加了新变量$date_is_matching
  3. 降低了代码的复杂度。

与以下替换$chk=0;直到foreach($record1 as $key=> $value){}//Opening to closing

$date_is_matching=0; 
//If date in $record1 is present in $wiprecord set $date_is_matching as 1. 
foreach ($record1 as $key=>$value) { 
    foreach ($wiprecord as $key1=> $value1) { 
     if($value[0] == $value1[0]) { 
      $date_is_matching=1; 
      array_push($record1[$key], $wiprecord[$key1][1]); 
     } 
    } 
    if($date_is_matching!=1) { 
     array_push($record1[$key], 0); 
    } 
    $get_first_array[$key] = $record1[$key]; 
    $date_is_matching=0; 
} //But now $get_first_array = $record1; 

这是我是如何显现您的问题及解决方法:link


更新

$fill_date = array(); //New variable for adding missed dates and values(0). 
for($i=0;$i<count($get_first_array)-1;$i++){ 
    $j = $i+1; 
    $diff[$i] = GetDays($get_first_array[$i][0], $get_first_array[$i+1][0]); //Gets the dates between the two. 
    if(!empty($diff[$i]) && is_array($diff[$i])) { 
     foreach($diff[$i] as $date) { 
      $fill_date[] = array(0=>$date,1=>0,2=>0); //Push the date and values 
     } 
    } 
} 
$get_first_array = array_merge($get_first_array,$fill_date); //Merge with the final array. 
var_dump($get_first_array); 

功能GetDays()

function GetDays($sStartDate, $sEndDate) { 
    // Firstly, format the provided dates. This function works best with YYYY-MM-DD 
    // but other date formats will work thanks to strtotime(). 
    $sStartDate = strtotime($sStartDate); 
    $sEndDate = strtotime($sEndDate); 

    // If $sStartDate is bigger than $sEndDate, Then swap $sStartDate and $sEndDate 
    if($sStartDate>$sEndDate) { 
     $ttime = $sStartDate; 
     $sStartDate = $sEndDate; 
     $sEndDate = $ttime; 
    } 

    $sStartDate = gmdate("Y-m-d", $sStartDate); 
    $sEndDate = gmdate("Y-m-d", $sEndDate); 

    // Start the variable off with the start date 
    //$aDays[] = $sStartDate; 

    // Set a 'temp' variable, sCurrentDate, with the start date - before beginning the loop 
    $sCurrentDate = $sStartDate; 

    // While the current date is less than the end date 
    while($sCurrentDate < $sEndDate){ 
    // Add a day to the current date 
    $sCurrentDate = gmdate("Y-m-d", strtotime("+1 day", strtotime($sCurrentDate))); 
    // Add this new day to the aDays array 
    if($sCurrentDate != $sEndDate) 
     $aDays[] = $sCurrentDate; 
    } 

    // Once the loop has finished, return the array of days. 
    return $aDays; 
} 


输入阵列

$record1 = array(0 => array(0=>'2013-03-18',1=>10), 
       1 => array(0=>'2013-03-20',1=>6), 
       2 => array(0=>'2013-03-21',1=>10), 
       3=>array(0=>'2013-03-24',1=>10)); 

$wiprecord = array(0 => array(0=>'2013-03-20',1=>5), 
        1 => array(0=>'2013-03-21',1=>5)); 


输出阵列

$get_first_array = array (0 => array (0 => 2013-03-18 1 => 10 2 => 0) 
          1 => array (0 => 2013-03-20 1 => 6 2 => 5) 
          2 => array (0 => 2013-03-21 1 => 10 2 => 5) 
          3 => array (0 => 2013-03-24 1 => 10 2 => 0) 
          4 => array (0 => 2013-03-19 1 => 0 2 => 0) 
          5 => array (0 => 2013-03-22 1 => 0 2 => 0) 
          6 => array (0 => 2013-03-23 1 => 0 2 => 0)) ; 
+0

它为我工作先生 – swapnil 2013-05-03 04:47:07

+0

先生这段代码有工作,但它适用于嵌套的foreach其实我希望它应该为外部foreach工作,无论哪个日期价值是不存在的,那么它表示与零值的日期。例如18/03/2013,2013年3月20日,2013年3月23日具有价值,所以在这个日期,这很有价值,但我也想代表那2013/03/2013 = 0, 21/03/2013 = 0,22/03/2013 = 0 – swapnil 2013-05-03 08:51:31

+0

okie中间的日期应填写为0 ??? – 2013-05-03 08:54:18