3

我正在从存储为 12345 的数据库中提取一个 ID 号

当我在我的页面(php)上显示它时,我想让它显示为 1-2345

我可以在不使用 Javascript 的情况下做到这一点吗?如果是这样,怎么做?

谢谢!

ETA:它是动态提取的数据循环的一部分,因此数字总是不同的。我需要能够告诉它在第一个数字后面加上一个破折号。不一定是1-2345;它更多的是 X-XXXX(其中 X 是一个随机数)。

4

6 回答 6

12

您应该能够在 MySQL 中使用以下内容:

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

请参阅带有演示的 SQL Fiddle

这实现了以下 MySQL 函数:

或者您可以使用SUBSTR代替RIGHTand LENGTH

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

请参阅带有演示的 SQL Fiddle

于 2013-03-25T16:52:48.290 回答
4

在 PHP 中

$id = (str)$dbVal;
$str = $id[0]."-".substr($id, 1, strlen($id) - 1);
echo $str;
于 2013-03-25T16:54:38.797 回答
3

其他答案没有说明将代码放在哪里以及为什么。在第一个数字后插入破折号是显示相关的逻辑,显示相关的逻辑属于模板。它当然不属于数据库层。您可以将实际代码放在 HTML 旁边,但这将是 a) 可能不是很能显示意图,并且 b) 不是很可重用。

为了最好的关注点分离,我会首先在它自己的文件中定义一个这样的“帮助”函数:

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

然后,在您的模板中,您可以执行此操作(假设您包含了帮助文件):

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

希望你能看到以这种方式分离事物会让其他人和你未来的自己很清楚发生了什么。您可以只查看函数名称并看到“哦,这会在第一个数字之后插入一个破折号”。您不必查看任何代码并考虑它可能会做什么。

于 2013-03-25T16:54:18.733 回答
3
$var = "12345";
echo $var[0] . "-" . substr($var,1);

这应该适用于任何长度的值。

于 2013-03-25T16:56:36.103 回答
3

首先,使用您的SELECTMySQL 命令查找您的 ID 号。假设$string实际上是 ID 的“字符串化”版本。

$string = "12345"; 
$string = str_replace($string[0], $string[0] . "-", $string); 
echo $string; 
于 2013-03-25T17:00:31.470 回答
2
 $string1 = substr($id, 0,1);
 $string2 = substr($id, 1, strlen($id));
于 2013-03-25T16:55:01.973 回答