Php 用mysql查询中的值替换日期数组中的日期

Php 用mysql查询中的值替换日期数组中的日期,php,mysql,arrays,date,Php,Mysql,Arrays,Date,我使用下面的链接创建了一个日期数组 但是,我想通过比较日期(在数组中)和日期(在查询结果中)来替换该数组中的日期 如果它们相等,那么我将用mysql查询中的结果替换数组中的日期 数组: array( 9/1/2013, 9/2/2013, 9/3/2013, 9/4/2013, 9/5/2013 ) 查询结果: | date | value0 | value1 | value2 | and so on

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

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

如果它们相等,那么我将用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
$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']];
}
如何在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

}
?>


但问题是:有些日期没有按我希望的顺序输出。

假设所有日期都存储在名为
$list
的数组中,查询结果名为
$query\u result
,使用foreach迭代所有日期,使用
isset()
判断日期是否在
$query\u 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";
    }
}

也许可以尝试一下。。。如果有问题,请告诉我,我会帮你解决。:)


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

您可以一次处理两个阵列,如下所示:

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
$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']];
}

考虑以下示例:

 // 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
这是现场演示

试试看:

<?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>";
}

?>


您尝试了什么?现在查询结果如何?请提交您尝试的代码,例如foreach($getDays as$day){$row=mysql\u fetch\u array($getTime);if($day==$row['date']){//print$row[]values}否则{/$day value}需要将查询结果放入数组中吗?@rmm04,是的,并使用日期作为键。@rmm04,有问题吗,请随意在这里发表评论。实际上,我在显示数据库中的其他字段时遇到了问题,现在我正在做类似的事情来显示这些字段。我使用for循环来迭代我的字段,但它不会返回所有结果。对不起,我整天都很忙。您可以添加
var\u dump($result)
,将输出粘贴到您的答案中。如果这次我是正确的,您还想知道哪个日期来自数组,哪个日期来自数据库。正确的?在这种情况下,多维数组肯定会有所帮助。但是为了有一个更简单的方法,您可能希望分配一些唯一的值,而不是这里的0:$outputArray[$date]=0;但若您觉得数据库可以有任何数字,那个么在PHP中您也可以分配一个字符串。例如:$outputArray[$date]='INP';所以,现在在输出数组中,如果日期的值是'INP',它来自数组else from db。如果您想使用多维数组方式,请告诉我。我可以为此编写代码。是的,实际上表中还有其他字段需要输出。