Написал такую функцию:
function next_day($month,$day) { // Принимает
if ((int)$month == 1 or 3 or 5 or 7 or 8 or 10 or 12) $duration_month = 31;
elseif ((int)$month == 4 or 6 or 9 or 11) $duration_month = 30;
else $duration_month = 28;
if ($day < $duration_month) { // Если не 31 число
$day++; // то +1 день
}
else { // Если 31 число
$month++; // То +1 месяц
$day = 1; // И день = 1
}
$nextDate = array(
'month' => (int)$month,
'day' => (int)$day
);
return $nextDate;
}
Но первый if всегда возвращает true. Как можно заменить это условие? Я бы мог конечно перечислить $month == 1 && $month == 3 и т.п. но получается, как-то не красиво.
Хочу спросить, как сделать красиво и чтобы работало?)
И еще один вопрос:
$query = "SELECT `id`
FROM `".$table."`
WHERE `checked_by` = '".$user_id."'
AND `time_add` BETWEEN TIMESTAMP(".$date." 04:00:00') AND TIMESTAMP('".$date." 03:59:59')";
$result = mysql_query($query) or ($summ = 0); // Если запрос не проходит, то переменная будет равно нулю
if(isset($result) || mysql_num_rows($result)>0) {
$summ = mysql_num_rows($result); // Записываем количество строк в переменную
}
Не нравится мне такая проверка if(isset($result) || mysql_num_rows($result)>0) , т.к. потом мне нужно как раз таки узнать это количество строк и получается, что php будет два раза узнавать количество строк, как написать лучше? И вообще правильно ли так проверять, что INSERT прошел без ошибок?
Спустя 5 минут, 14 секунд (29.01.2012 - 23:38) forza написал(а):
$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");
прибавляем к текущей дате 1 день
прибавляем к текущей дате 1 день

Спустя 10 минут, 10 секунд (29.01.2012 - 23:49) Barh написал(а):
Да, видимо зря мучался)) Спасибо, но всё равно мне интересны те вопросы, которые я спросил. В будущем точно пригодится!)
Спустя 13 минут, 3 секунды (30.01.2012 - 00:02) asokol написал(а):
а) $month == 1 || $month == 3 - in_array($month, array(1, 3));
б) if ($summ = mysql_num_rows($result)) ...
в) По поводу INSERT (у каждого варианта своя область применения):
1. mysql_affected_rows();
2. INSERT INTO ... ON DUPLICATE KEY UPDATE;
3. INSERT IGNORE.
P.S. а как насчет високосного года?
б) if ($summ = mysql_num_rows($result)) ...
в) По поводу INSERT (у каждого варианта своя область применения):
1. mysql_affected_rows();
2. INSERT INTO ... ON DUPLICATE KEY UPDATE;
3. INSERT IGNORE.
P.S. а как насчет високосного года?
Спустя 14 минут, 29 секунд (30.01.2012 - 00:16) Placido написал(а):
Цитата (asokol @ 29.01.2012 - 23:02) |
P.S. а как насчет високосного года? |
Присоединяюсь. Добавлю, что не всякий год, который делится на 4 без остатка - високосный (не являются високосными года, которые кратны 100 и не кратны 400).
Спустя 24 минуты, 4 секунды (30.01.2012 - 00:40) Barh написал(а):
forza
asokol
Placido
Спасибо за ответы! Мне пригодится это знать на будущее)
asokol
Placido
Спасибо за ответы! Мне пригодится это знать на будущее)
Спустя 4 минуты, 23 секунды (30.01.2012 - 00:45) Barh написал(а):
И еще вопрос в вдогонку, часто нужно писать такие условия:
Подозреваю, что как-то можно это упростить?)
if (isset($author['lastname_rus'])) echo $author['lastname_rus'];
Подозреваю, что как-то можно это упростить?)
Спустя 5 минут, 53 секунды (30.01.2012 - 00:51) neadekvat написал(а):
echo isset($author['lastname_rus']) ? $author['lastname_rus'] : null;
Спустя 20 минут, 24 секунды (30.01.2012 - 01:11) Barh написал(а):
neadekvat
Хм.. не знаю упрощает ли это вызов) тернарные операторы конечно немного побыстрее, но вот возник вопрос, может кто знает, если нет, измерения проведу сам.
1. Идет условие if, если false, то просто идём дальше, нет условия else:
2. Или такое тернарное выражение, но здесь есть условие для не true:
И по моему даже вы делали замеры по скорости if, else и тернарных условий.
От тех, которые работают быстрее -> к медленным: тернарный true, if, тернарный false, else.
А что будет быстрее в этом варианте? 1 или 2? При условии что переменной $var не существует. Ведь в первом выражение isset возвращает false и мы идем дальше. А во втором варианте еще и ссылаемся на условие для false, на null.
P.S. И по факту получилось даже длиннее запись)
Хм.. не знаю упрощает ли это вызов) тернарные операторы конечно немного побыстрее, но вот возник вопрос, может кто знает, если нет, измерения проведу сам.
1. Идет условие if, если false, то просто идём дальше, нет условия else:
if (isset($var)) echo var;
2. Или такое тернарное выражение, но здесь есть условие для не true:
echo isset($var) ? $var : null;
И по моему даже вы делали замеры по скорости if, else и тернарных условий.
От тех, которые работают быстрее -> к медленным: тернарный true, if, тернарный false, else.
А что будет быстрее в этом варианте? 1 или 2? При условии что переменной $var не существует. Ведь в первом выражение isset возвращает false и мы идем дальше. А во втором варианте еще и ссылаемся на условие для false, на null.
P.S. И по факту получилось даже длиннее запись)
Спустя 5 минут, 13 секунд (30.01.2012 - 01:16) neadekvat написал(а):
Barh, на самом деле, if лучше записть в две строки. Это к слову о "запись длиннее".
Формально - да, if должен быть быстрее, т.к. echo отправит в поток null.
Формально - да, if должен быть быстрее, т.к. echo отправит в поток null.
Спустя 8 часов, 51 минута, 56 секунд (30.01.2012 - 10:08) Barh написал(а):
neadekvat
Жаль, что не существует более короткой записи.
У меня есть достаточно длинный HTML-код и переменные PHP, которые на нем размещаются. Но этих PHP может придти разное количество из БД, поэтому там где вывод перееменной у меня и стоит подобная проверка. Думал, что можно как то упростить..
Жаль, что не существует более короткой записи.
У меня есть достаточно длинный HTML-код и переменные PHP, которые на нем размещаются. Но этих PHP может придти разное количество из БД, поэтому там где вывод перееменной у меня и стоит подобная проверка. Думал, что можно как то упростить..
Спустя 4 часа, 46 минут, 30 секунд (30.01.2012 - 14:55) DarkLynx написал(а):
А вы проверку на существование переменной проводите в шаблоне?
Почему не проверить проверку на существование переменной в скрипте который их отдает шаблону?? То есть если переменной нет, возвращать переменную но пустую..
А все выводы в шаблоне с
<? if (isset($var)) echo $var; ?>
заменить на простое
<?=$var; ?>
Почему не проверить проверку на существование переменной в скрипте который их отдает шаблону?? То есть если переменной нет, возвращать переменную но пустую..
А все выводы в шаблоне с
<? if (isset($var)) echo $var; ?>
заменить на простое
<?=$var; ?>
Спустя 1 час, 18 минут, 33 секунды (30.01.2012 - 16:13) Barh написал(а):
DarkLynx
Спасибо, да, наверное так будет лучше, сделать проверку переменных раньше)
Спасибо, да, наверное так будет лучше, сделать проверку переменных раньше)
Спустя 24 минуты, 20 секунд (30.01.2012 - 16:37) neadekvat написал(а):
Цитата (DarkLynx @ 30.01.2012 - 15:55) |
заменить на простое <?=$var; ?> |
Пока что все-таки лучше писать <?php echo
Спустя 32 секунды (30.01.2012 - 16:38) inpost написал(а):
Barh
<?=$var; ?>
это не проверка, это банальный ВЫВОД переменной. Если её нет - сразу WARNING, невозможно вывести несуществующую переменную. Разве что собак лепить придется.
<?=$var; ?>
это не проверка, это банальный ВЫВОД переменной. Если её нет - сразу WARNING, невозможно вывести несуществующую переменную. Разве что собак лепить придется.
Спустя 16 минут, 25 секунд (30.01.2012 - 16:54) DarkLynx написал(а):
Цитата (inpost @ 30.01.2012 - 13:38) |
Barh <?=$var; ?> это не проверка, это банальный ВЫВОД переменной. Если её нет - сразу WARNING, невозможно вывести несуществующую переменную. Разве что собак лепить придется. |
Я же в посте написал, в коде который отправляет переменные в шаблон, сделать проверку на существование переменной, если нету, то создать нулловую.. Код ниже
if (!isset($var))
$var = null;
Спустя 11 минут, 14 секунд (30.01.2012 - 17:06) inpost написал(а):
DarkLynx
Как-то слишком много, я бы просто собаку влепил бы
Как-то слишком много, я бы просто собаку влепил бы

Спустя 12 минут, 54 секунды (30.01.2012 - 17:19) DarkLynx написал(а):
Цитата (inpost @ 30.01.2012 - 14:06) |
DarkLynx Как-то слишком много, я бы просто собаку влепил бы ![]() |
Ну конечно можно и собачку, но одно дело "починить" ошибку, а другое дело скрыть её =)
Спустя 6 часов, 51 минута, 31 секунда (31.01.2012 - 00:10) Barh написал(а):
asokol
Цитата |
а) $month == 1 && $month == 3 - in_array($month, array(1, 3)); |
Только наверное ты хотел сказать, что $month == 1 || $month == 3 аналогична $month = in_array($month, array(1, 3)) ?
Потому что я так понимаю это просто проверяет массив на вхождения in_array($month, array(1, 3). И если хоть одно вхождение есть, то уже true?
Спустя 5 минут, 12 секунд (31.01.2012 - 00:15) Barh написал(а):
Наверное противоречит правилам писать в теме не по теме))
Так что прошу прощения, т.к. создавать новую для такого вопроса не вижу смысла, а вопрос такой:
Это слегка измененная мной функция из уроков IRBIS-school.
Собственно изменена она только в одном месте (не считая комментариев).
Было:
Стало:
Так вот если писать in_array($holiday,array(6,0))), то вхождение 0 найдено не будет. Я так понимаю функция date() возвращает не 0, а null. Или я не прав?
Так что прошу прощения, т.к. создавать новую для такого вопроса не вижу смысла, а вопрос такой:
for($i = 0; $i <= 30; $i++)
{
$hol = ''; // Создаем пустую переменную
$date = date('Y-m-d', strtotime($i .' day')); // Записываем в переменную $i-день в формате Y-m-d (2003-08-31)
$holiday = date('w', strtotime($i .' day')); // Записываем в переменную $i-день в формате w (День недели) от 0 (воскресенье) до 6 (суббота)
if($holiday == in_array($holiday,array(6,null))) // если день недели равен 6 или 0, то переменная $hol принимает значение УРА!
$hol = ' <b style="color:red">Ура!</b>';
echo $date . ' '. date('D', strtotime($i .' day')) . $hol .'<br>'; // выводим теперь по порядку Y-m-d ДЕНЬ НЕДЕЛИ и переменную $hol (если она есть)
}
Это слегка измененная мной функция из уроков IRBIS-school.
Собственно изменена она только в одном месте (не считая комментариев).
Было:
if($holiday == 6 || $holiday == 0)
Стало:
if($holiday == in_array($holiday,array(6,null)))
Так вот если писать in_array($holiday,array(6,0))), то вхождение 0 найдено не будет. Я так понимаю функция date() возвращает не 0, а null. Или я не прав?
Спустя 22 часа, 59 минут, 42 секунды (31.01.2012 - 23:15) asokol написал(а):
Barh, я поправил ошибку.
А зачем $holiday сравнивать с результатом in_array?
А зачем $holiday сравнивать с результатом in_array?
for($i=0, $time=time(); $i<=30; $i++) {
echo date('Y-m-d D', $time+$i*24*3600)
. (in_array(date('w', $time+$i*24*3600), array(0,6))?' <strong style="color:red;">Ура!</strong>':'') . '<br />';
}