0

我使用下面的链接创建了一个日期数组。

http://boonedocks.net/mike/archives/137-Creating-a-Date-Range-Array-with-PHP.html

但是,我想通过比较日期(在数组中)和日期(在查询结果中)来替换该数组中的日期。

如果它们相等,那么我将用 mysql 查询中的结果替换数组中的那个日期。

大批:

array(
      9/1/2013,
      9/2/2013,
      9/3/2013,
      9/4/2013,
      9/5/2013
 )

查询结果:

|   date    |  value0  |   value1  |   value2   |  and so on...
|  9/2/2013 |    5     |     A     |     AQ     |
|  9/3/2013 |    6     |     V     |     CD     |
|  9/5/2013 |    7     |     X     |     SA     |

结果必须是这样的:

PHP date    ---->     9/1/2013      0      
Database    ---->     9/2/2013      5
Database    ---->     9/3/2013      6
PHP date    ---->     9/4/2013      0
Database    ---->     9/5/2013      7

我如何在 PHP 中做到这一点?我一直在尝试使用 foreach 中的 while 循环,但不起作用。

如果我的表中有几列怎么办?我已经尝试了下面的答案,但我认为它只是二维的?在我的 mysql 查询中查看上面的编辑。

编辑:

我现在已经这样做了:

 <?php

    $getDays = array(
      9/1/2013,
      9/2/2013,
      9/3/2013,
      9/4/2013,
      9/5/2013
    );


$result = array();
while($row = mysql_fetch_assoc($getTime))
{
     $result[] = $row;
}

for($i=0; $i < count($getDays); $i++)
{

?>
<tr>
    <td><?php echo $result[$i]['date']; ?></td>
    <td><?php echo $result[$i]['value0']; ?></td>
    <td><?php echo $result[$i]['value1']; ?></td>
    <td><?php echo $result[$i]['value2']; ?></td>
</tr>

<?php

}
?>

但问题是:有些日期没有像我希望的那样输出。

4

5 回答 5

1

更简单的选择应该是将日期作为结果数组的键。

您可以像这样一次处理两个数组:

$outputArray = array();

//assuming $inputArray is your date array
foreach ($inputArray as $date) {
    $outputArray[$date] = 0;
}

//assuming $res holds the output of mysql_query()
while($row = mysql_fetch_assoc($res)) {
    $outputArray[$row['date']] = $outputArray[$row['value']];
}
于 2013-09-18T04:04:23.517 回答
0

Maybe give this a try... If it's way off, let me know and I'll help you get it figured out. :)

<?php
 $phpdates = array(
               '9/1/2013',
               '9/2/2013',
               '9/3/2013',
               '9/4/2013',
               '9/5/2013'
            );

 while ($allsqlresults = mysql_fetch_array($yourOriginalQueryHere)) {
    $mysqldates[] = $allsqlresults['date'];
    $mysqlvalues[] = $allsqlresults['values'];
 }
 foreach ($phpdates as $key => $phpdate) {
   if (in_array($phpdate, $mysqldates) {
     $text = 'PHP date';
     $column3 = $mysqlvalues[$key];
   }
   else {
     $text = 'Database';
     $column3 = 0;
   }
   print $text . $phpdate . $column3;
 }
于 2013-09-18T04:00:41.420 回答
0

假设所有日期都存储在一个名为 的数组$list中,查询结果名为$query_result,使用foreach迭代所有日期,用于isset()判断日期是否在$query_result

<?php
$list = array(
    '9/1/2013',
    '9/2/2013',
    '9/3/2013',
    '9/4/2013',
    '9/5/2013',
);

$query_result = array(
    '9/2/2013' => 5,
    '9/3/2013' => 6,
    '9/5/2013' => 7,
);

foreach ($list as $date)
{
    if (isset($query_result[$date]))
    {
        echo "Database    ---->     $date      " . $query_result[$date] . "\n";
    }
    else
    {
        echo "PHP date    ---->     $date      0" . "\n";
    }
}
于 2013-09-18T03:58:59.523 回答
0

考虑以下示例:

 // PHP Date Array
 $array1 = array('9/5/2013', '9/6/2013', '9/7/2013', '9/8/2013');

 // Database Array
 $array2 = array('9/5/2013'=>'5', '9/8/2013'=>'7');

 foreach( $array1 as $arr ){
   if( array_key_exists ($arr, $array2) !== false ){
      echo "Database date    ---->    " . $arr . "    " . $array2[$arr] . "\r\n";
   }
   else {
      echo "PHP date         ---->    " . $arr . "    0\r\n";
   }
 }



// OUTPUT
Database date    ---->    9/5/2013    5
PHP date         ---->    9/6/2013    0
PHP date         ---->    9/7/2013    0
Database date    ---->    9/8/2013    7

这是Codepad.org 上的现场演示

于 2013-09-18T04:09:31.700 回答
0

尝试:

<?php

$array = array(
    '9/1/2013',
    '9/2/2013',
    '9/3/2013',
    '9/4/2013',
    '9/5/2013'
);

$query_array = array(
    '9/2/2013' => 5,
    '9/3/2013' => 6,
    '9/5/2013' => 7
);

$final_array = array();
foreach ($array as $date)
{
    if(isset($query_array[$date])) {
        $final_array[$date]["type"] = "Database date";
        $final_array[$date]["value"] = $query_array[$date];
    } else {
        $final_array[$date]["type"] = "PHP date";
        $final_array[$date]["value"] = 0;
    }
}

foreach($final_array as $date=>$each) {
    echo $each["type"]."    ---->   ".$date."     ".$each["value"]."<br>";
}

?>
于 2013-09-18T04:20:41.643 回答