【问题标题】:formatting an array of mobile numbers格式化手机号码数组
【发布时间】:2010-04-16 10:11:55
【问题描述】:

我正在创建一个短信应用程序,下面的代码应该是:

  1. 检查手机号码/手机号码是否为 11 个字符。
  2. 检查数字是否以 07 开头。

如果这两个条件都不满足,它应该从数组中删除数字。

所以以下数字是有效的:

07123456789,07123456790,07123456791,07123456792,07123456793,07123456794

但是以下内容不会(并且需要删除):

0801458,07855488,6695522214124514

    $param["number"] = "07123456789,07123456790,07123456791,07123456792,07123456793,07123456794,0801458,07855488,6695522214124514";
    $number = explode(',', $param["number"]);
foreach($number as $num){
    if (!substr_compare($num, "07", 0, 3, false)) {
        unset($num);
    }
    elseif (substr_compare($num, "07", 0, 3, true)) {
        if(strlen($num) == 11) {
            $li .= "447" . substr($num, 2) . ',';
        }
    }
}
$il .= substr($li, 0, strlen($li)-1); 
echo $il;

//  $request = substr($request, 0, strlen($request)-1); 
//  return $n;
}

我还需要从结果中删除最后的逗号。

我们将不胜感激。

谢谢,

凯尔

【问题讨论】:

  • 我不想这么说,但你实际上并没有问过问题。

标签: php arrays string


【解决方案1】:

您可以构建一个包含有效数字的新数组,并在最后进行 implode()。

$validNumbers = array();
foreach($number as $num){
    if (!substr_compare($num, "07", 0, 3, false)) {
        unset($num);
    }
    elseif (substr_compare($num, "07", 0, 3, true)) {
        if(strlen($num) == 11) {
            $validNumbers[] = "447" . substr($num, 2);
        }
    }
}
$il .= implode($validNumbers, ',');

【讨论】:

  • 感谢您的回复。这似乎已经排序了。 :) 对 Ali G 和 Stereofrog 都 +1。猫,我注意到你喜欢说明显的哈哈……这是一个问题。
【解决方案2】:

正则表达式应该这样做:

preg_grep('/^07\d{9}$/', $number);

【讨论】:

    【解决方案3】:

    您可以将数字转换为数组,对它们应用过滤器,然后将它们粘合在一起。像这样:

    $numbers = "07123456789,07123456790,07123456791,07123456792,07123456793,07123456794,0801458,07855488,6695522214124514";
    $array = explode(',', $numbers);
    $filteredArray = array_filter($array, create_function('$item',
        'return strlen($item) == 11 && stripos($item, "07") === 0;'
    ));
    echo implode(",", $filteredArray);
    

    或者,如果您使用的是 PHP 5.3,您可以编写相同的内容:

    $numbers = "07123456789,07123456790,07123456791,07123456792,07123456793,07123456794,0801458,07855488,6695522214124514";
    $array = explode(',', $numbers);
    $filteredArray = array_filter($array, function($item) {
        return strlen($item) == 11 && stripos($item, "07") === 0;
    });
    echo implode(",", $filteredArray);
    

    哪个更漂亮。两者都会输出:

    07123456789,07123456790,07123456791,07123456792,07123456793,07123456794
    

    进一步阅读:

    PHP.net array_filter()
    PHP.net create_function()
    PHP.net Anonymous functions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 2014-03-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多