Php 函数返回数值
这样做的优雅方式是什么 我有这个->MC0001这是输入。它总是以MC开头 这个输入的输出是MC0002 所以我创建了一个函数,在删除MC000后应该返回1。稍后我将把它转换成一个整数,这样我可以生成MC0002,它可以升到MC9999。要做到这一点,我想我需要在字符串中循环并计算零等等,但我想那样会把事情搞得一团糟Php 函数返回数值,php,string,Php,String,这样做的优雅方式是什么 我有这个->MC0001这是输入。它总是以MC开头 这个输入的输出是MC0002 所以我创建了一个函数,在删除MC000后应该返回1。稍后我将把它转换成一个整数,这样我可以生成MC0002,它可以升到MC9999。要做到这一点,我想我需要在字符串中循环并计算零等等,但我想那样会把事情搞得一团糟 有人有更好的主意吗?不确定在有前导零的情况下,是否有更好的方法将字符串解析为整数 我建议做以下几点: 1.循环遍历从位置2开始的字符串,因为您不需要MC部件 2.如果发现一个大于0
有人有更好的主意吗?不确定在有前导零的情况下,是否有更好的方法将字符串解析为整数 我建议做以下几点: 1.循环遍历从位置2开始的字符串,因为您不需要MC部件
2.如果发现一个大于0的数字,停止,使用当前位置和字符串长度减去当前位置得到子字符串。转换为整数,返回值。您可以通过在字符串上进行操作来移除MC PAR。< /P>
$a = "MC0001";
$a = substr($a, 2); //Lengths of "MC"
$number = intval($a); //1
这应该可以做到:
<?php
$string = 'MC0001';
// extract the part succeeding 'MC':
$number_part = substr($string, 2);
// count the digits for later:
$number_digits = strlen($number_part);
// turn it into a number:
$number = (int) $number_part;
// make the next sequence:
$next = 'MC' . str_pad($number + 1, $number_digits, '0', STR_PAD_LEFT);
只需使用ltrim删除任何前导字符:
使用filter_var可能是最好的解决方案
echo filter_var("MC0001", FILTER_SANITIZE_NUMBER_INT)."\n";
echo filter_var("MC9999", FILTER_SANITIZE_NUMBER_INT);
我会给你
0001
9999
这些可以转换为int或按原样使用,因为如果您将它们用作数字,PHP将自动转换。我不明白:函数的输入是什么,期望的输出是什么?你能举一些例子吗?为什么不使用正则表达式?@webband对于这样一个简单的例子来说,这不是不必要的能力。嘿,伙计们,我更新了我的问题来澄清一些事情。我没有使用正则表达式,因为我不知道如何使用它。但我很想看到它对我有用。有趣的解决方案。你可能是指ltrimthough@Jack:是的,忘记可能有尾随的0。我将继续编辑我的答案。我的字符串将是动态的,因此我无法确定会遇到多少尾随的零。@esandrkwn:刚刚编辑了我的答案。使用ltrim只删除前导字符而不是尾随字符。OP详细说明了问题btw,此答案不完整。看起来问题希望MC也在输出中。编辑:我的错,抱歉。是的,它确实给了我想要的输出。谢谢,为什么要投否决票?很明显,有人试图推动他自己的解决方案^^^这不是完整的答案,尽管我没有投票;事实上,我的票也被否决了,尽管它是完整的。
<php
// original number to integer
sscanf( $your_string, 'MC%d', $your_number );
// pad increment to string later on
sprintf( 'MC%04u', $your_number + 1 );
0001
9999
<php
// original number to integer
sscanf( $your_string, 'MC%d', $your_number );
// pad increment to string later on
sprintf( 'MC%04u', $your_number + 1 );