Php 用mysql查询中的值替换日期数组中的日期
我使用下面的链接创建了一个日期数组 但是,我想通过比较日期(在数组中)和日期(在查询结果中)来替换该数组中的日期 如果它们相等,那么我将用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
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。如果您想使用多维数组方式,请告诉我。我可以为此编写代码。是的,实际上表中还有其他字段需要输出。