Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何拆分数字查询结果?_Php_Mysql - Fatal编程技术网

Php 如何拆分数字查询结果?

Php 如何拆分数字查询结果?,php,mysql,Php,Mysql,我正在从数据库中提取一个id号,它存储为12345 当我在我的页面(php)上显示它时,我希望它显示为1-2345 我可以不使用Javascript来完成这项工作吗?如果是,怎么做 谢谢 ETA:它是动态拉取的数据循环的一部分,因此数字总是不同的。我需要能够告诉它在第一个数字后面加一个破折号。它不一定是1-2345;更多的是X-XXXX(其中X是一个随机数)。您应该能够在MySQL中使用以下内容: select concat(left(yourCol, 1), '-',

我正在从数据库中提取一个id号,它存储为12345

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

我可以不使用Javascript来完成这项工作吗?如果是,怎么做

谢谢


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

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

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

这将实现以下MySQL功能:

或者您可以使用
SUBSTR
而不是
RIGHT
LENGTH

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


其他答案没有说明将代码放在何处以及原因。在第一个数字后插入破折号是显示相关逻辑,显示相关逻辑属于模板。它当然不属于数据库层。您可以将实际的代码与HTML放在一起,但这将是a)可能不太具有意图性,b)不太可重用

为了最好地分离关注点,我首先在自己的文件中定义一个“helper”函数,如下所示:

function insert_dash_after_first_number($value)
{
  return str_replace($value[0], $value[0].'-', $value);
}
然后,在模板中,您可以执行以下操作(如果已包含帮助文件):


希望你能看到,用这种方式把事情分开,会让别人和你未来的自己清楚地知道发生了什么。您只需查看函数名,就会看到“哦,这在第一个数字后面插入了一个破折号”。您不必查看任何代码,也不必考虑它可能做什么。

在PHP中

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

这适用于任何长度的值。

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

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

因此,您希望整数
12345
显示为一个字符串,看起来像
1-2345
如果您发布代码,我们可以尝试帮助您。如果有超过5个数字怎么办?是XX-XXXX还是X-XXXXX?如果超过8个怎么办?@raina77ow如果OP正在提取一个不是
12345
的不同ID,为什么她希望
echo
'1-2345';`?
substr\u是否会替换($orig,'-',1,0)
虽然在SQL中这样做很酷,但我想知道这不应该是视图的责任吗。)对对我来说,这是与显示相关的逻辑。另外,提供此数据的查询很有可能被ORM抽象掉(或者至少我希望是这样)。此外,对于一个非SQL专家来说,它的作用并不十分清楚。@raina77ow通常,当您希望数据以特定的方式显示时,您可以在表示层中进行。我将在SQL.Wow中展示这是如何实现的。这是非常虔诚的。我没有想到可以在SQL内部使用连接。太棒了+投票支持你教我一些东西。substr(你的COL,2)比整个正确的、长度的东西要有效得多……很好,
stru\u replace
方法可能是迄今为止我看到的所有答案中最简洁的方法。在我的回答中,我大量借用了这一点。向上投票。事实上,不,
substr\u replace
在这里是最相关的(因为它相当于
array\u splice
)。@raina77ow,事实上,我本来打算选择
substr\u replace
,但我想让OP看看发生了什么。为此创建一个函数是有意义的,@jason-谢谢。我想我的困难在于,我的结果是从一个查询中提取出来的,与其他表格数据一起分割成类似$row['number_id']的部分(虽然我不喜欢使用表格,但如果是表格数据,我的选择有限)。我将继续研究这个问题,感谢您帮助我深入思考这个问题,而不仅仅是一个可行的答案,以得到一个可行的答案。@MelanieSumnerSmith我希望传达将显示逻辑与业务/域逻辑分离的原则。我不太在乎选择我的答案或其他什么,但我确实希望您了解关注点分离。这里有一篇文章对此做了一点描述。听起来你现在有一个单独的问题。创建一个单独的问题,并随时链接到它,我来看看。
 $string1 = substr($id, 0,1);
 $string2 = substr($id, 1, strlen($id));
$var = "12345";
echo $var[0] . "-" . substr($var,1);
$string = "12345"; 
$string = str_replace($string[0], $string[0] . "-", $string); 
echo $string;