2014-10-17 92 views
0

我有一个查询从数据库中获取数组。将值添加到数组中的所有元素(php)

$result = mysqli_query($con,"SELECT `Time_D` from `Schedule` where `Stop` = 1 "); 

while ($row = mysqli_fetch_array($result)) {       
echo $row['Time_D'] . "<br>"; 
} 

这个数组($ row)包含很多次,如果我没有弄错。

我现在想添加例如10分钟到数组中的所有元素。 我该怎么做?

+0

'Time_D'是什么类型?时间戳,int,...? – Naruto 2014-10-17 09:54:56

+0

为什么每个答案都是关于mysql'UPDATE'的?我没有看到这个问题?他想要添加**数组中的所有元素** – Sharky 2014-10-17 10:01:22

+0

哇,这是很多回应! 'Time_D'类型=时间。我确实想把数组放回到数据库中,即使它不在问题中:)。我本来应该问这个,我的不好。我不想只更新值,我希望他们在一个新的表/列/下面添加在同一列,所以我可以通过一个新的查询显示它们。 – PHPirate 2014-10-17 11:23:17

回答

1

好吧,算一算自己毕竟。

$result = mysqli_query($con,"SELECT `Time_D` from `Schedule` where `Stop` = 1 "); 

//get database result 
while ($row = mysqli_fetch_array($result)) {       
$rows[] = $row['Time_D']; //store all the times in one array 
} 
print_r ($rows); 

echo "<br>"; 
$time_difference=600; 
$i=0; 

while (($i) < (count($rows))) { 
$rows[$i] = (strtotime($rows[$i])) + ($time_difference); //with timestamps, because, well, php and times... 
$rows[$i] = date('H:i:s', ($rows[$i])); // back from timestamp to time 
$i = $i +1; 
} 
print_r($rows); 
0

您需要更新这样

$row['Time_D'] = time() + 600; 

或只需10秒

$row['Time_D'] += 600; 

然后将其推回数据库

mysql_query('update table_name set Time_D = '{$row['Time_D']}' where id = '{$row['id']}' 

或东西的结束。

0

你可以通过使用DATE_ADD从mysql查询本身来完成。

"SELECT DATE_ADD(`Time_D`,INTERVAL 10 MINUTE) AS 'Time_D' FROM `Schedule` WHERE `Stop` = 1 " 

你可以有一个这样的参数在php脚本:

$minutes_to_add = 10; 

$result = mysqli_query($con,"SELECT DATE_ADD(`Time_D`,INTERVAL ".$minutes_to_add." MINUTE) AS 'Time_D' FROM `Schedule` WHERE `Stop` = 1 "); 

while ($row = mysqli_fetch_array($result)) 
{       
    echo $row['Time_D'] . "<br>"; 
} 
+0

我必须说的代码看起来非常简单,但不幸的是,当我把它放在我的PHP文件中它不输出任何东西。当我在phpmyadmin中直接尝试查询时,它会输出'Time_D'列,但是只能将值'null'而不是时间值输出。我究竟做错了什么? – PHPirate 2014-10-17 11:25:01

+0

我刚刚注意到phpmyadmin中有一个错误:“当前的选择不包含唯一的列,网格编辑,复选框,编辑,复制和删除功能不可用。” – PHPirate 2014-10-17 11:26:19

+0

@PHPirate即时通讯猜测'Time_D'不是类型“DATETIME”。也许只是输入“TEXT”?如果它不是“DATETIME”,那么你必须解析你得到的任何文本,做适当的转换到时间(strtotime http://php.net/manual/en/function.strtotime.php可能有所帮助),然后加10分钟 – Sharky 2014-10-19 06:20:00

0

您只能在SQL做到这一点:

"UPDATE `Schedule` SET `Time_D` VALUES = DATE_ADD(`Schedule`.`Time_D`,INTERVAL 10 MINUTE) where `Stop` = 1" 
+0

这似乎是一个更新查询,但我不想更新值,我想添加10分钟到现有时间,并在数据库中创建一个新的数组和一组新的值,或将现有值。 – PHPirate 2014-10-17 11:29:00

0

你可能错了。 $row不包含很多次。只要仍有可用记录,$row将作为数组分配给查询结果的下一行。如果你想改变所有的时间,把它们保存到一个新的数组中。在你的while循环(不要忘了申报$rows):

$rows[] = $row['Time_D']; 

$rows现在存储了所有的时间。然后,您可以(在while循环之后)遍历$rows并更改数据。

$rows = array_map(function($time) { 
    return $time + (60 * 10); // Given $time is a timestamp 
}, $rows); 

如果你不希望保存时间(即直接输出他们在while循环),保存的array_map开销,并在while循环,直接做到这一点:

echo $row['Time_D'] + 60*10; 

根据您的具体情况,您可能希望使用按键值(即按时间)存储时间 - 否则您将无法将它们转回到您正在使用的“时间表”。

如果您只想更新数据库记录,请参阅Axel的答案。

+0

你绝对是在你的第一段!为此非常感谢!我用print_r($ rows);进行调试,现在的确在数组中显示所有时间。现在,当我在函数后面打印$行时,我得到结果“Array([0] => 608 [1] => 609 [2] => 610 [3] => 611”)。有时间戳吗?你用$ time函数出现在你的函数中,然后说给出了$ time是一个时间戳。你能详细说明一下吗? – PHPirate 2014-10-17 11:54:38

+0

要清楚:我想把时间保存在一个数组中,我可以在表中插入一个表(我认为这是可能的,对吧)我不想更新数据库记录,而是单独插入新记录 – PHPirate 2014-10-17 11:56:31

+0

你可以给我一个查询结果的行的例子吗?Time_D的格式是什么? – Elias 2014-10-17 12:01:39