2014-10-22 119 views
0

我尝试根据日期匹配数组。第一个数组由函数(getDateRange)生成,第二个数组来自我的Wordpress数据库。根据日期匹配两个数组

function getDateRange($startDate, $endDate, $format="Y-m-d") 
    { 
     //Create output variable 
     $datesArray = array(); 
     //Calculate number of days in the range 
     $total_days = round(abs(strtotime($endDate) - strtotime($startDate))/86400, 0) + 1; 
     if($total_days<0) { return false; } 
     //Populate array of weekdays and counts 
     for($day=0; $day<$total_days; $day++) 
     { 
      $datesArray[] = date($format, strtotime("{$startDate} + {$day} days")); 
     } 
     //Return results array 
     return $datesArray; 
    } 


$sql = "SELECT date(datetime) AS date, SUM(amount) as amount FROM sales GROUP BY 1"; 
$results = $wpdb->get_results($sql, ARRAY_A); 

// Generate the date range 
$dateRange = getDateRange('2014-10-01', '2014-10-06'); 

foreach($dateRange as $date) { 
echo $date . ' | '; 

    if (array_key_exists($date, $results)) { 
    echo 'OK'; 

    } else { 
    echo '0'; 
    } 
    echo '<br />'; 
} 

利用上述我的代码没有得到匹配值:

2014-10-01 | 0 
2014-10-02 | 0 
2014-10-03 | 0 
2014-10-04 | 0 
2014-10-05 | 0 
2014-10-06 | 0 

期望的结果是:

2014-10-01 | 0 
2014-10-02 | 0 
2014-10-03 | OK 
2014-10-04 | 0 
2014-10-05 | OK 
2014-10-06 | 0 
+0

var_dump($ results)'返回什么? – rnevius 2014-10-22 08:45:45

回答

1

ARRAY_A - 结果将是作为数字索引输出使用列名作为键的关联阵列阵列

Codex

所以array_key_exists将搜索在$results阵列,它只有数字键的键日期。

您可以实现搜索功能的多维数组,而不是array_key_exists

function searchForDate($date, $array) { 
    foreach ($array as $key => $val) { 
     if ($val['date'] === $date) { 
      return $key; 
     } 
    } 
    return null; 
} 

从修改:PHP multidimensional array search by value

0

首先,正确的答案依赖于请问你的$results阵列看起来像...

Array ([0] => 2014-10-01 [1] => 2014-10-02 [2] => 2014-10-03 [3] => 2014-10-04 [4] => 2014-10-05 [5] => 2014-10-06) 

那,你的$dateRange数组。通常情况下,在的foreach,你会得到每一个日期作为简单的字符串,那么,反过来,你的$date VAR将是:
2014-10-01
2014年10月2日
2014年10月3日
2014 -10-04
2014年10月5日
2014年10月6日

和那些在if (array_key_exists($date, $results)) {}使用的值。这意味着,采用这种情况下,您的$results阵列必须有日期作为键,所以它应该是这个样子:
Array ([2014-10-03] => 'foo' [2014-10-06] => 'bar')

在此之后,你一定有命中。 但是,没有$results转储,我不能保证这是你所需要的。

希望它能帮助!
继续编码!战神。