2013-07-12 4 views
0

У меня есть следующие целые

PHP Сравнить целые

7 
77 
0 
20 

в массиве. Я использую их для проверки, откуда возник звонок.
Номера, такие как 730010123, 772930013, 20391938. Что мне нужно сделать, так это мне нужно проверить, начинается ли число с 7 или 77 для примера.

Есть ли способ сделать это в PHP и избежать тысяч заявлений?
Одна из проблем, с которой я столкнулась, заключается в том, что если я проверю, начинается ли число с 7, номера также начинаются с 77. Обратите внимание, что 7 номеров являются мобильными, а 77 - разделяемыми номерами затрат и не равны в любом случае, поэтому мне нужно их разделить.

+0

Поэтому в основном все номера, начинающиеся с 7 являются мобильные номера, КРОМЕ они начинают с 77, что делает их общей стоимостью? Легко различить, просто добавьте 70, 71, ... 79 номеров в свой массив и определите их как мобильные. – Sven

ответ

0
if (substr($str, 0, 1) == '7') ||{ 
    if (substr($str, 0, 2) == '77'){ 
     //starts with '77' 
    } else { 
     //starts with '7' 
    } 
} 
+0

Я боюсь рассматривать это как строку, это самый быстрый и, вероятно, самый простой способ сделать это. На самом деле, я не могу думать иначе, хотя я бы чувствовал себя грязным, делая это так. – Anpan

+0

@ Анпан - Это не заставляет меня чувствовать себя грязным вообще. Работа с ними, как струны, на самом деле чище, потому что после беспорядка нет необходимости убирать их, когда они избавляются от остатка после деления. –

0

Я сделал небольшой пример с демо-массива, я надеюсь, что вы можете использовать его:

$array = array(
    7 => 'Other', 
    70 => 'Fryslan!', 
    20 => 'New York', 
    21 => 'Dublin', 
    23 => 'Amsterdam', 
); 

$number = 70010123; 

$place = null; 

foreach($array as $possibleMatch => $value) { 
     if (preg_match('/^' . (string)$possibleMatch . '/', (string)$number)) 
     $place = $value; 
} 

echo $place; 

Ответ в данном случае является «Fryslân». Вы должны помнить, что в этом случае также совпадают 7? Таким образом, вы можете добавить некоторую метрическую систему в случае двух совпадений.

0

Способ сделать это - обработать «целое число», которое вы получили как число, как строку.

Это что-то вроде этого:

$number = 772939913; 
$filter = array (
    '77' => 'type1', 
    '20' => 'type2', 
    '7' => 'type3', 
    '0' => 'type4'); 
$match = null; 
foreach ($filter as $key => $val){ 
    $comp = substr($number, 0, strlen($key)); 
    if ($comp == $key){ 
     $match = $key; 
     break; 
    } 
} 

if ($match !== null){ 
    echo 'the type is: ' . $filter[$match]; 
    //you can proceed with your task 
} 
0
Is this you want? 

<?php 

$myarray = array(730010123, 772930013, 20391938); 

foreach($myarray as $value){ 

    if(substr($value, 0, 2) == "77"){ 
     echo "Starting With 77: <br/>"; 
     echo $value; 
     echo "<br>"; 
    } 
    if((substr($value, 0, 1) == "7")&&(substr($value, 0, 2) != "77")){ 
     echo "Starting With 7: <br/>"; 
     echo $value; 
     echo "<br>"; 
    } 
} 



?> 
0

Вы можете использовать preg_match и array_filter для этого

function check_digit($var) { 
    return preg_match("/^(7|77|0)\d+$/"); 
} 

$array_to_be_check = array("730010123" , "772930013", "20391938"); 

print_r(array_filter($array_to_be_check, "check_digit")); 
Смежные вопросы