我尝试根据日期匹配数组。第一个数组是由函数(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 :(得分: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;
}
答案 1 :(得分: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-02
2014-10-03
2014-10-04
2014-10-05
2014-10-06
这些是if (array_key_exists($date, $results)) {}
中使用的值。这意味着,使用此方案,您的$results
数组必须将日期作为键,因此它应如下所示:
Array ( [2014-10-03] => 'foo' [2014-10-06] => 'bar' )
在此之后,你肯定会有点击率。
但同样,如果没有转储$results
,我无法保证这是您所需要的。
希望它有所帮助!
继续编码!
战神。