форматирование массива мобильных номеров - PullRequest
2 голосов
/ 16 апреля 2010

Я создаю приложение SMS, следующий код должен:

  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;
}

Мне также нужно удалить последнюю запятую из результата.

Любая помощь будет оценена.

Спасибо

Кайл

Ответы [ 3 ]

2 голосов
/ 16 апреля 2010

Вы можете создать новый массив из допустимых чисел и выполнить 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, ',');
1 голос
/ 16 апреля 2010

регулярное выражение должно делать:

preg_grep('/^07\d{9}$/', $number);
0 голосов
/ 16 апреля 2010

Вы можете преобразовать числа в массив, применить к ним фильтр, и они склеят их вместе. Как это:

$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 Анонимные функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...