Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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_Cakephp - Fatal编程技术网

Php 如何只过滤字符串中的数字,如果数字以零开头,如何添加另一个数字

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

我从PHP或cakephp开始

我有一个例子,当我只想得到一个字符串类型的代码中的数字

以下是示例字符串:

PR00006757

我要不带PR的电话号码00006757

我已经尝试使用:

$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不仅仅是零,而是所有的数字。。怎么计算零呢?对不起,你的答案是对的,我写错了。。非常感谢:)非常感谢,你的答案也是正确的,你尝试了不同的方法,但结果没有什么不同……:)