2014-10-17 74 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