Страницы

Поиск по вопросам

среда, 12 февраля 2020 г.

Как разделить строку на три части и получить из неё числа?

#php


Я получаю строку в виде "1990-03-02".

Это, как видите, дата. Как разделить эту дату на 3 части, чтобы было:

$a = 1990;
$b = 3;
$c = 2;

    


Ответы

Ответ 1



Раз вы работаете с датой, то можно использовать специализированные средства PHP для работы с датой/временем, а именно класс \DateTime. А сделать это можно вот так: $d = DateTime::createFromFormat('Y-m-d', '1990-03-02'); $a = (int)$d->format('Y'); $b = (int)$d->format('j'); $c = (int)$d->format('n'); Рабочий пример на IDEOne. Замечание: Для данной конкретной задачи с разбиением строки на три переменные подход с использованием \DateTime является несколько избыточным. Однако, он дает вам с одной стороны невероятную гибкость форматирования результата, а с другой позволяет думать о дате именно как о дате, а не наборе из трех переменных. Все это, в конечном счете, позволяет повысить уровень абстракции кода и снизить его суммарную сложность. А еще, при таком подходе вы можете запросто получать другие параметры вашей исходной даты с нулевыми трудозатратами. Вот так, например, можно получить номер недели: $week = (int)$d->format('W'); Использование специального типа данных для даты позволяет вам делать и более крутые штуки выражаясь четким высокоуровневым языком. Например, вы можете прибавить к вашей дате произвольный интервал, предположим, неделю: $new_date = $d->add(new DateInterval('P1W'));

Ответ 2



Можно использовать функцию sscanf() для разбора форматированной строки: $dateString = "1990-03-02"; list($a, $b, $c) = sscanf($dateString, "%d-%d-%d");

Ответ 3



$a = explode('-', $str); так получите разделенный массив. Ну а на ноль спереди проверить каждый элемент массива не проблема... $str = "1990-03-02"; $a = explode('-', $str); $year = $a[0]; if($a[1][0]==0){$month = $a[1][1];}else{$month = $a[1];} if($a[2][0]==0){$day = $a[2][1];}else{$day = $a[2];} либо тернарная проверка $str = "1990-03-02"; $a = explode('-', $str); $year = $a[0]; $a[1][0]==0 ? $month = $a[1][1] : $month = $a[1]; $a[2][0]==0 ? $day = $a[2][1] : $day = $a[2];

Ответ 4



list($a, $b, $c) = explode('-', '1990-03-02');

Комментариев нет:

Отправить комментарий