结束目标:将数据库中的数字块(例如0000000和22222以及333333333333)更改为不同的长度。例如,可能包含国家代码前缀的电话号码(例如+00(000)000-0000,或2,3,3,4的模式),因此可以根据不同的情况更改长度的选项电话号码格式会很好。
我喜欢使用explode或chunk_split来实现简单性的想法,因为我将处理大量数据并且我不希望它过多地耗尽服务器:
$string = "1111111111";
$new_nums = chunk_split($string, 3, " ");
echo $new_nums;
^这里唯一的问题是我只能使用一位数字。
最好的方法是什么?我应该创建一个函数吗?
答案 0 :(得分:1)
使用正则表达式?
$regex = "/(\\d{2})(\\d{3})(\\d{3})(\\d{4})/";
$number = "111111111111";
$replacement = "+$1 ($2) $3-$4";
$result = preg_replace($regex, $replacement, $number);
答案 1 :(得分:1)
虽然你在你的例子中提到了一个电话号码,但听起来你想要的东西可以做更多,同时也允许指定多个和可变的块长度。一种方法是创建一个函数来获取数据,分隔符/分隔符以及许多块值。
您可以使用func_num_args()
和func_get_args()
来计算您的块长度。
以下是此类功能的示例:
<?php
function chunkData($data, $separator)
{
$rebuilt = "";
$num = func_num_args();
$args = func_get_args();
if($num > 2)
{
for($i = 2; $i < $num; $i++)
{
if(strlen($data) > 0)
{
$string = substr($data, 0, $args[$i]);
$segment = strpos($data, $string);
if($segment !== false)
{
$rebuilt .= $string . $separator;
$data = substr_replace($data, "", 0, $args[$i]);
}
}
}
}
$rebuilt .= $data;
$rebuilt = rtrim($rebuilt, $separator);
return $rebuilt;
}
//Usage examples:
printf("Phone number: %s \n", chunkData("2835552093", "-", 3, 3, 4));
printf("Groups of three letters: %s \n", chunkData("ABCDEFGHI", " ", 3, 3, 3));
printf("King Roland's passcode: %s \n", chunkData("12345", ",", 1, 1, 1, 1, 1));
printf("Append leftovers: %s \n", chunkData("BlahBlahBlahJustPlainBlah", " ", 4, 4, 4));
printf("Doesn't do much: %s \n", chunkData("huh?", "-"));
?>
//Output:
Phone number: 283-555-2093
Groups of three letters: ABC DEF GHI
King Roland's passcode: 1,2,3,4,5
Append leftovers: Blah Blah Blah JustPlainBlah
Doesn't do much: huh?