我在特定日期合并两个数组。如果两个数组都有相同的日期,那么它将合并数组&在图表上绘制该数组。但问题是它正在合并阵列和放大器。仅在栏的开头附加栏,但不在两个日期相等的特定日期附加栏。 例如
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 :(得分:0)
我对您的代码进行了更改:
$chk
和if条件。$date_is_matching
。将以下$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 ) ) ;