Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
попытайтесь использовать разделение
list($hh,$mm,$ss)= split(':',$duration);
Что-то вроде этого?
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
else
$result = $vals[0] . 'hours, ' . $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
Довольно простой:
list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";
Это только отобразит часы или минуты, если будет кто-либо, и вставляет "и" перед секундами, если существуют часы, минуты или оба для отображения. Если бы Вы хотели стать действительно необычными, то Вы могли бы добавить некоторый код для отображения "часа" по сравнению с "часами" как соответствующего, так же в течение многих минут и секунд.
Почему беспокойство с regex или взрывается, когда php обрабатывает время очень хорошо?
$sTime = '04:20:00';
$oTime = new DateTime($sTime);
$aOutput = array();
if ($oTime->format('G') > 0) {
$aOutput[] = $oTime->format('G') . ' hours';
}
$aOutput[] = $oTime->format('i') . ' minutes';
$aOutput[] = $oTime->format('s') . ' seconds';
echo implode(', ', $aOutput);
Преимущество - то, что можно переформатировать время однако, Вам нравится (включая,/пополудни, корректировки к часовому поясу, дополнение / вычитание, и т.д.).
Одно небольшое изменение могло быть:
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = "{$vals[1]} minutes, {$vals[2]} seconds";
else
$result = "{$vals[0]} hours, {$vals[1]} minutes, {$vals[2]} seconds";
взорвитесь (), для анютиных глазок. Это - задание для регулярных выражений!
<?php
preg_match('/^(\d\d):(\d\d):(\d\d)$/', $video_duration, $parts);
if ($parts[1] !== '00') {
echo("{$parts[1]} hours, {$parts[2]} minutes, {$parts[3]} seconds");
}
else {
echo("{$parts[2]} minutes, {$parts[3]} seconds");
}
Полностью непротестированный, но что-то как этот должно работать. Обратите внимание, что этот код предполагает, что фрагмент часа всегда будет двумя цифрами (например, трехчасовое видео было бы 03:00:00
вместо 3:00:00
).
Править: Ретроспективно, использование регулярных выражений для этого является, вероятно, случаем сверхразработки; взорвитесь (), сделает задание точно также и вероятно даже будет быстрее в этом случае. Но это был первый метод, который придет на ум, когда я считал вопрос.
Преобразовывание 0:00:00 к часам, минутам и секундам в PHP действительно легко.
$hours = 0; $minutes = 0; $seconds = 0;
Вот другой путь с различными функциями, который более открыт и более пошаговое для новичков. это также обрабатывает 1 час и много часов... Вы могли попробовать, используют ту же логику для обработки этих 0 минут и 0 секунд.
<?php
// your time
$var = "00:00:00";
if(substr($var, 0, 2) == 0){
$myTime = substr_replace(substr_replace($var, '', 0, 3), ' Minutes, ', 2, 1);
}
elseif(substr($var, 1, 1) == 1){
$myTime = substr_replace(substr_replace($var, ' Hour, ', 2, 1), ' Minutes, ', 11, 1);
}
else{
$myTime = substr_replace(substr_replace($var, ' Hours, ', 2, 1), ' Minutes, ', 12, 1);
}
// work with your variable
echo $myTime .' Seconds';
?>
Если Вы действительно хотите использовать встроенную функцию, возможно, для устойчивости, можно попробовать
date_default_timezone_set('UTC');
$date = strtotime($hms,0);
и используйте любую из функций форматирования даты (date()
, strftime()
, и т.д.) для форматирования времени всегда, Вы желаете. Или можно использовать вывод strptime($hms,'%T')
. Любой может быть излишеством для простого сценария, который Вы имеете.
Я отвечу с другим подходом проблемы. Мой подход должен сохранить длины в секундах. Затем завися потребности, легко представить в эти секунды как hh:mm:ss при помощи:
print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds);
(для Вашего вопроса)
или искать на длине в базе данных:
SELECT * FROM videos WHERE length > 300;
например, для поиска видео с длиной выше, чем 5 минут.