Php 如何只过滤字符串中的数字,如果数字以零开头,如何添加另一个数字
我从PHP或cakephp开始 我有一个例子,当我只想得到一个字符串类型的代码中的数字 以下是示例字符串: PR00006757 我要不带PR的电话号码00006757 我已经尝试使用:Php 如何只过滤字符串中的数字,如果数字以零开头,如何添加另一个数字,php,cakephp,Php,Cakephp,我从PHP或cakephp开始 我有一个例子,当我只想得到一个字符串类型的代码中的数字 以下是示例字符串: PR00006757 我要不带PR的电话号码00006757 我已经尝试使用: $code = filter_var($this->request->data['Price']['code'], FILTER_SANITIZE_NUMBER_INT); pr ($code); exit; 然后我得到结果“00006757” 但我想要+1的结果, 为“00006757+1”=0
$code = filter_var($this->request->data['Price']['code'], FILTER_SANITIZE_NUMBER_INT);
pr ($code); exit;
然后我得到结果“00006757”
但我想要+1的结果,
为“00006757+1”=00006758
但实际上,我加1(+1)后的结果是6758
而不是00006758
如何以这种方式格式化答案?您得到的输出是正确的,因为添加1会自动将
$code
转换为整数类型。您应该使用来填充通过添加1得到的整数值,使其返回到所需长度的字符串
$code = filter_var($this->request->data['Price']['code'], FILTER_SANITIZE_NUMBER_INT);
$code +=1;
$code = str_pad($code, 8, '0', STR_PAD_LEFT); //convert to padded string
print_r ($code);
编辑:
编辑2:
增加了长度的自动检测
$code = filter_var($this->request->data['Price']['code'], FILTER_SANITIZE_NUMBER_INT);
$len = strlen($code); // store the length of the code
$code +=1;
$code = str_pad($code, $len, '0', STR_PAD_LEFT);
print_r ($code);
你走在正确的轨道上。使用filter_var是获取所需数字的正确方法。没有办法改变PHP进行基本加法的方式。您最好的机会是识别数字上的填充,并在加法发生后将该填充加回去。下面是对您的代码的更新,可能会有所帮助
$code = filter_var($this->request->data['Price']['code'], FILTER_SANITIZE_NUMBER_INT);
$len = strlen($code);
$newcode = $code + 1;
str_pad($newcode, $len, "0", STR_PAD_LEFT);
在使用示例输入进行测试后,我收到了:“00006758”。这里是另一个示例
<?php
$str_code = 'PR00006757';
$code = filter_var($str_code, FILTER_SANITIZE_NUMBER_INT);
$code +=1;
$num_padded = sprintf("%08d", $code);
echo $num_padded;
6757+1=6758
尝试使用$your\u new\u value=str\u pad($your\u new\u value,8,“0”,str\u pad\u LEFT)
这个字符串是否总是像PR00006757那样有0000
4个零,或者像PR00086757、PR002866757这样的变量?@bansi:我已经尝试过使用str_pad,但是没有区别,结果是6758。。。我不知道我是否错了。检查答案@Kanudo:字符串并不总是4个零,有时可能是5个零,等等…你的代码是正确的,但是,如何自动检测多少个数字,你能将8改为声明多少个零的变量吗?很高兴知道它对你有用。如果你的问题解决了,接受答案。我已经尝试过了,但是结果是0000006758,零是4,我认为是6是因为$len不仅仅是零,而是所有的数字。。怎么计算零呢?对不起,你的答案是对的,我写错了。。非常感谢:)非常感谢,你的答案也是正确的,你尝试了不同的方法,但结果没有什么不同……:)