2013-03-25 2 views
3

Я потянув номер документа из базы данных, где она хранится, как 12345Как разбить результат числового запроса?

Когда я отобразить его на моей странице (PHP), я хотел бы, чтобы он обнаружится как 1-2345

Могу ли я сделать это без использования Javascript? Если да, то как?

Спасибо!

ETA: это часть цикла данных, который вытягивается динамически, поэтому число всегда отличается. Мне нужно будет сказать, чтобы он поместил тире после первого номера. Это не обязательно 1-2345; это больше X-XXXX (где X - случайное число).

+0

Итак, вы хотите целое '12345', которое будет отображаться в виде строки, похожий на' 1-2345' –

+0

Если вы разместите код, мы можем попытаться помочь вам. – Uby

+2

Что делать, если имеется более 5 цифр? Должно ли быть XX-XXXX или X-XXXXX? Что делать, если их больше 8? – Joni

ответ

12

Вы должны быть в состоянии использовать следующее в MySQL:

select 
    concat(left(yourCol, 1), 
     '-', 
     right(yourcol, length(yourCol)-1)) YourValue 
from yourtable 

См SQL Fiddle with Demo

Это реализует следующие функции MySQL:

Или вы можете использовать SUBSTR вместо RIGHT и LENGTH:

select 
    concat(left(yourCol, 1), 
     '-', 
     substr(yourcol, 2)) YourValue 
from yourtable; 

См SQL Fiddle with Demo

+2

Хотя это здорово делать это в SQL, интересно, разве это не ответственность View.) – raina77ow

+1

Да. Это для меня логика, связанная с дисплеем. Кроме того, есть хороший шанс, что запрос, поставляющий эти данные, будет отвлечен ORM (или, по крайней мере, я надеюсь, что это так). Кроме того, эксперту, не являющемуся SQL, совершенно не ясно, что он это делает. –

+0

@ raina77ow Обычно, когда вы хотите, чтобы данные отображались определенным образом, вы сделали бы это на уровне презентации. Я показываю, как это возможно в SQL. – Taryn

3

Другие ответы не адресованы , где введите ваш код и почему. Вставка тире после первой цифры - логика, связанная с дисплеем, и связанная с отображением логика принадлежит шаблону. Это, конечно, не относится к слою базы данных. Вы можете поместить фактический код прямо вместе с HTML, но это будет: а) вероятно, не очень-то, чтобы показать и b) не очень многократно использовать.

Для лучшего разделения проблем, я бы сначала определить функцию «помощника», как это, в своем собственном файле:

function insert_dash_after_first_number($value) 
{ 
    return str_replace($value[0], $value[0].'-', $value); 
} 

Затем, в шаблоне, вы можете сделать это (предоставляется вам включали вспомогательный файл):

<?php echo insert_dash_after_first_number('12345'); ?> 

Надеюсь, вы можете увидеть, что разделение вещей таким образом, что делает его довольно ясно, к другим и вашего будущего себя, что происходит. Вы можете просто посмотреть имя функции и увидеть «о, это вставляет тире после первого числа». Вам не нужно смотреть на какой-либо код и думать о том, что он может сделать.

+0

имеет смысл создать функцию для этого, @jason - спасибо. Я полагаю, что я боюсь, что мои результаты втянуты из запроса, разбиваются на что-то вроде $ row ['number_id'] вместе с другими табличными данными (и, хотя я презираю использование таблиц, если это табличные данные, у меня есть ограниченные возможности). Я буду работать над этим и поблагодарить вас за то, что помог мне подумать об этом дальше, чем просто ответ, который будет работать, чтобы получить ответ, который будет хорошо работать. –

+0

@MelanieSumnerSmith Я надеялся сообщить принцип разделения логики отображения из бизнес-логики. Меня не волнует выбор моего ответа или что-то еще, но я надеюсь, что вы узнаете о разделении проблем. Вот статья, которая описывает это немного. http://tebros.com/2010/02/separate-display-from-logic/ –

+0

Похоже, у вас сейчас есть отдельная проблема. Создайте отдельный вопрос и не стесняйтесь ссылаться на него, и я посмотрю. –

4

В PHP

$id = (str)$dbVal; 
$str = $id[0]."-".substr($id, 1, strlen($id) - 1); 
echo $str; 
3
$var = "12345"; 
echo $var[0] . "-" . substr($var,1); 

Это должно работать для значений любой длины.

3

Во-первых, используйте команду MySQL SELECT, чтобы найти свой идентификационный номер. Предположим, что $string - это «строчная» версия идентификатора.

$string = "12345"; 
$string = str_replace($string[0], $string[0] . "-", $string); 
echo $string; 
+1

Nice - метод 'str_replace', вероятно, является самым кратким выходом из всех ответов, которые я видел до сих пор. Я в значительной степени одолжил это в своем ответе. Upvoted. –

+0

На самом деле, нет, 'substr_replace' является наиболее значимым здесь (так как это строковый эквивалент' array_splice'). – raina77ow

+0

@ raina77ow, на самом деле, я собирался пойти на 'substr_replace', но я хотел, чтобы OP увидел, что происходит. – cygorx

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