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

+0

Почему каждый ответ о mysql 'UPDATE'? Я не вижу этого в вопросе? Он хочет добавить ко всем элементам в массиве ** ** – Sharky

+0

Вау, это много ответа! Тип «Time_D» = время.И это правда, я хочу вернуть массив в базу данных, хотя это не было в вопросе :). Мне следовало бы спросить, что это не так. Я не хочу просто обновлять значения, но хочу, чтобы они были в новой таблице/столбце/добавлены ниже в том же столбце, чтобы я мог показать их с помощью нового запроса. – PHPirate

ответ

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

Вы можете сделать это из самого mysql-запроса, используя DATE_ADD.

"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

+0

Я только что заметил ошибку в phpmyadmin: «Текущий выбор не содержит уникального столбца. Редактирование сетки, флажок, редактирование, копирование и удаление недоступны». – PHPirate

+0

@PHPirate im, предполагающий, что «Time_D» не имеет типа «DATETIME». Может быть, это просто тип «ТЕКСТ»? Если это не «DATETIME», тогда вы должны разобрать любой текст, который вы получите, сделать соответствующую трансмортацию до времени (strtotime http://php.net/manual/en/function.strtotime.php может помочь), а затем добавить 10 минут – Sharky

0

Вы можете сделать это только в SQL:

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

Это, кажется, запрос на обновление, но я не хочу обновлять значения, я хочу добавить 10 минут к существующим временам и создать новый массив и новый набор значений в базе данных ниже или в сторону существующих значений , – PHPirate

0

Вы можете быть ошибочно. $row не содержит много раз. Пока есть доступные записи, $row назначается следующей строкой результата запроса в виде массива. Если вы хотите изменить все время, сохраните их в новом массиве. В ваше время петли (не забудьте объявить $rows):

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

$rows теперь хранит все времена. Затем вы можете (после цикла while) перебирать $rows и изменять данные.

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

Если вы не хотите, чтобы сохранить раз (т.е. непосредственно выводить их в то время как петли), за исключением накладных расходов array_map и сделать это непосредственно в то время как петли:

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

В зависимости от вашей конкретной ситуации вы можете захотеть использовать хранилище ключа-значения (то есть «id-to-time») для времени, иначе вы не сможете вернуть их к «расписанию», которое вы используете.

Если вы хотите обновить записи базы данных, см. Ответ Акселя.

+0

Вы абсолютно правы в своем первом абзаце! Большое спасибо за это! Я использовал print_r ($ rows); для отладки, и теперь он действительно показывает все время в массиве. Теперь, когда я печатаю $ rows после вашей функции, я получаю как результат «Array ([0] => 608 [1] => 609 [2] => 610 [3] => 611». Возможно, это что-то делать с отметками времени? Вы входите в свою функцию с помощью $ time, а затем говорите, что данный момент времени - это метка времени. Не могли бы вы подробно остановиться на этом? – PHPirate

+0

Чтобы быть ясным: я хочу сохранить время в массиве, который я могу вставить в таблицу (Я думаю, что это возможно, правильно) .Я не хочу обновлять записи базы данных, но вставлять новые записи отдельно. – PHPirate

+0

Можете ли вы привести пример строки из результата запроса? Каков формат Time_D? – Elias

Смежные вопросы