根据日期匹配两个数组

时间:2014-10-22 08:43:09

标签: php arrays wordpress

我尝试根据日期匹配数组。第一个数组是由函数(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

2 个答案:

答案 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;
}

修改自:PHP multidimensional array search by value

答案 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,我无法保证这是您所需要的。

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