How to create scalable phone number country detector

Please House i need expert advice in creating a scalable phone number country detector.

I will update my full codes once i on my laptop so i can get help where needed.

Here is my Code


// Create the country codes list
function list_phonecodes() {

$code = array(
"Afghanistan" => "+93",
"Åland Islands" => "+35818",
"Albania" => "+355",
"Algeria" => "+213",
"American Samoa" => "+1684",
"Andorra" => "+376",
"Angola" => "+244",
"Anguilla" => "+1264",
"Antigua and Barbuda" => "+1268",
"Argentina" => "+54",
"Armenia" => "+374",
"Aruba" => "+297", 	
"Ascension" => "+247",
"Australia" => "+61",
"Australian Antarctic Territory" => "+6721",		
"Australian External Territories" => "+672", 		
"Austria" => "+43",
"Azerbaijan" => "+994",
"Bahamas" => "+1242",
"Bahrain" => "+973",
"Bangladesh" => "+880",
"Barbados" => "+1246",
"Barbuda" => "+1268",
"Belarus" => "+375",
"Belgium" => "+32",
"Belize" => "+501",
"Benin" => "+229",
"Bermuda" => "+1441",
"Bhutan" => "+975",
"Bolivia" => "+591",
"Bonaire" => "+5997",
"Bosnia and Herzegovina" => "+387",
"Botswana" => "+267",
"Brazil" => "+55",
"British Indian Ocean Territory" => "+246",
"British Virgin Islands" => "+1284",
"Brunei Darussalam" => "+673",
"Bulgaria" => "+359",
"Burkina Faso" => "+226",
"Burundi" => "+257",
"Cape Verde" => "+238",
"Cambodia" => "+855",
"Cameroon" => "+237",
"Canada" =>	"+1",
"Caribbean Netherlands" => "+5993",
"Caribbean Netherlands" => "+5994",
"Caribbean Netherlands" => "+5997",
"Cayman Islands" => "+1345",
"Central African Republic" => "+236",
"Chad" => "+235",
"Chatham Island, New Zealand" => "+64",
"Chile" => "+56",
"China" => "+86",
"Christmas Island" => "+6189164",
"Cocos (Keeling) Islands" => "+6189162",
"Colombia" => "+57",
"Comoros" => "+269",
"Congo" => "+242",
"Congo, Democratic Republic of the (Zaire)" => "+243",
"Cook Islands" => "+682",
"Costa Rica" => "+506",
"Ivory Coast" => "+225",
"Croatia" => "+385",
"Cuba" => "+53",
"Curaçao" => "+5999",
"Cyprus" => "+357",
"Czech Republic" => "+420",
"Denmark" => "+45",
"Diego Garcia" => "+246",
"Djibouti" => "+253",
"Dominica" => "+1767",
"Dominican Republic" => "+1809",
"Dominican Republic" => "+1829",
"Easter Island" => "+56",
"Ecuador" => "+593",
"Egypt" => "+20",
"El Salvador" => "+503",
"Ellipso (Mobile Satellite service)" => "+8812",	
"Ellipso (Mobile Satellite service)" => "+8813",		
"EMSAT (Mobile Satellite service)" => "+88213",	
"Equatorial Guinea" => "+240",
"Eritrea" => "+291",
"Estonia" => "+372",
"eSwatini" => "+268",
"Ethiopia" => "+251",
"Falkland Islands" => "+500",
"Faroe Islands" => "+298",
"Fiji" => "+679",
"Finland" => "+358",
"France" => "+33",
"French Antilles" => "+596",		
"French Guiana" => "+594",
"French Polynesia" => "+689",
"Gabon" => "+241",
"Gambia" => "+220",
"Georgia" => "+995",
"Germany" => "+49",
"Ghana" => "+233",
"Gibraltar" => "+350",
"Global Mobile Satellite System (GMSS)" => "+881",		
"Globalstar (Mobile Satellite Service)" => "+8818",
"Globalstar (Mobile Satellite Service)" => "+8819", 				
"Greece" => "+30",
"Greenland" => "+299",
"Grenada" => "+1473",
"Guadeloupe" => "+590",
"Guam" => "+1671",
"Guatemala" => "+502",
"Guernsey" => "+441481",
"Guernsey" => "+447781",
"Guernsey" => "+447839", 
"Guernsey" => "+447911",
"Guinea" => "+224",
"Guinea-Bissau" => "+245",
"Guyana" => "+592",
"Haiti" => "+509",
"Honduras" => "+504",
"Hong Kong" => "+852",
"Hungary" => "+36",
"Iceland" => "+354",
"ICO Global (Mobile Satellite Service)" => "+8810",
"ICO Global (Mobile Satellite Service)" => "+8811", 	 		
"India" => "+91",	
"Indonesia" => "+62",
"Inmarsat SNAC" => "+870", 		
"International Freephone Service (UIFN)" => "+800",		
"International Networks" => "+882",
"International Networks" => "+883",	
"International Premium Rate Service" => "+979",		
"International Shared Cost Service (ISCS)" => "+808", 		
"Iran" => "+98",
"Iraq" => "+964",
"Ireland" => "+353",
"Iridium (Mobile Satellite service)" => "+8816",
"Iridium (Mobile Satellite service)" => "+8817",
"Isle of Man" => "+441624",
"Isle of Man" => "+447524",
"Isle of Man" => "+447624", 
"Isle of Man" => "+447924",
"Israel" => "+972",
"Italy" => "+39",
"Jamaica" => "+1876",
"Jan Mayen" => "+4779",
"Japan" => "+81",
"Jersey" => "+441534",
"Jordan" => "+962",
"Kazakhstan" => "+76", 
"Kazakhstan" => "+77",
"Kenya" => "+254",
"Kiribati" => "+686",
"Korea, North" => "+850",
"Korea, South" => "+82",
"Kosovo" => "+383",
"Kuwait" => "+965",
"Kyrgyzstan" => "+996",
"Laos" => "+856",
"Latvia" => "+371",
"Lebanon" => "+961",
"Lesotho" => "+266",
"Liberia" => "+231",
"Libya" => "+218",
"Liechtenstein" => "+423",
"Lithuania" => "+370",
"Luxembourg" => "+352",
"Macau" => "+853",
"Madagascar" => "+261",
"Malawi" => "+265",
"Malaysia" => "+60",
"Maldives" => "+960",	
"Mali" => "+223",
"Malta" => "+356",
"Marshall Islands" => "+692",
"Martinique" => "+596",
"Mauritania" => "+222",
"Mauritius" => "+230",
"Mayotte" => "+262269", 
"Mayotte" => "+262639",
"Mexico" => "+52",
"Micronesia, Federated States of" => "+691",
"Midway Island, USA" => "+1808",
"Moldova" => "+373",
"Monaco" => "+377",
"Mongolia" => "+976",
"Montenegro" => "+382",
"Montserrat" => "+1664",
"Morocco" => "+212",
"Mozambique" => "+258",
"Myanmar" => "+95",
"Nagorno-Karabakh" => "+37447", 
"Nagorno-Karabakh" => "+37497",
"Namibia" => "+264",	
"Nauru" => "+674",	
"Nepal" => "+977",
"Netherlands" => "+31",
"Nevis" => "+1869",
"New Caledonia" => "+687",
"New Zealand" => "+64",
"Nicaragua" => "+505",
"Niger" => "+227",
"Nigeria" => "+234",
"Niue" => "+683",
"Norfolk Island" => "+6723",
"North Macedonia" => "+389",
"Northern Cyprus" => "+90392",
"Northern Ireland" => "+4428",
"Northern Mariana Islands" => "+1670",
"Norway" => "+47",
"Oman" => "+968",
"Pakistan" => "+92",
"Palau" => "+680",
"Palestine, State of" => "+970",
"Panama" => "+507",
"Papua New Guinea" => "+675",
"Paraguay" => "+595",
"Peru" => "+51",	
"Philippines" => "+63",
"Pitcairn Islands" => "+64",
"Poland" => "+48",
"Portugal" => "+351",
"Puerto Rico" => "+1787", 
"Puerto Rico" => "+1939",
"Qatar" => "+974",
"Réunion" => "+262",	
"Romania" => "+40",
"Russia" => "+7",	
"Rwanda" => "+250",
"Saba" => "+5994",	
"Saint Barthélemy" => "+590",
"Saint Helena" => "+290",
"Saint Kitts and Nevis" => "+1869",
"Saint Lucia" => "+1758",
"Saint Martin (France)" => "+590",
"Saint Pierre and Miquelon" => "+508",
"Saint Vincent and the Grenadines" => "+1784",	
"Samoa" => "+685",
"San Marino" => "+378",
"São Tomé and Príncipe" => "+239",	
"Saudi Arabia" => "+966",
"Senegal" => "+221",	
"Serbia" => "+381",
"Seychelles" => "+248",
"Sierra Leone" => "+232",
"Singapore" => "+65",
"Sint Eustatius" => "+5993",
"Sint Maarten (Netherlands)" => "+1721",	
"Slovakia" => "+421",
"Slovenia" => "+386",
"Solomon Islands" => "+677",
"Somalia" => "+252",
"South Africa" => "+27",	
"South Georgia and the South Sandwich Islands" => "+500",	
"South Ossetia" => "+99534",
"South Sudan" => "+211",
"Spain" => "+34",
"Sri Lanka" => "+94",
"Sudan" => "+249",	
"Suriname" => "+597",	
"Svalbard" => "+4779",
"Sweden" => "+46",
"Switzerland" => "+41",
"Syria" => "+963",
"Taiwan" => "+886",
"Tajikistan" => "+992",
"Tanzania" => "+255",
"Telecommunications for Disaster Relief by OCHA" => "+888",		
"Thailand" => "+66", 	
"Thuraya (Mobile Satellite service)" => "+88216", 		
"East Timor" => "+670",	
"Togo" => "+228",
"Tokelau" => "+690",
"Tonga" => "+676",	
"Transnistria" => "+3732", 
"Transnistria" => "+3735",
"Trinidad and Tobago" => "+1868",
"Tristan da Cunha" => "+2908",	
"Tunisia" => "+216",
"Turkey" => "+90",
"Turkmenistan" => "+993",	
"Turks and Caicos Islands" => "+1649",
"Tuvalu" => "+688",
"Uganda" => "+256",
"Ukraine" => "+380",
"United Arab Emirates" => "+971",
"United Kingdom" => "+44",
"United States" => "+1",
"Universal Personal Telecommunications (UPT)" => "+878", 		
"Uruguay" => "+598",
"US Virgin Islands" => "+1340", 	
"Uzbekistan" => "+998",
"Vanuatu" => "+678",	
"Vatican City State (Holy See)" => "+3906698",
"Venezuela" => "+58",
"Vietnam" => "+84",
"Wake Island, USA" => "+1808",
"Wallis and Futuna" => "+681",	
"Yemen" => "+967",	
"Zambia" => "+260",
"Zanzibar" => "+25524",
"Zimbabwe" => "+263"
);

return $code;

}




// Create the check phone code function
function check_phone($phone) {
	
$code = list_phonecodes();


$pick5 = substr($phone, 0, 6);
$pick4 = substr($phone, 0, 5);
$pick3 = substr($phone, 0, 4);
$pick2 = substr($phone, 0, 3);
$pick1 = substr($phone, 0, 2);


	if(array_search($pick5, $code) != false){
		$getkey = array_search($pick5, $code);

	}
	
	elseif(array_search($pick4, $code) != false){
		$getkey = array_search($pick4, $code);
	}

	elseif(array_search($pick3, $code) != false){
		$getkey = array_search($pick3, $code);
	}
	
	elseif(array_search($pick2, $code) != false){
		$getkey = array_search($pick2, $code);
	}
	
	elseif(array_search($pick1, $code) != false){
		$getkey = array_search($pick1, $code);
	}
	
	else{
		$getkey = 'nothing found';
	}
		

	
	echo $getkey;


}



// Run the check phone function
check_phone('+4425524789877787777');

In what way does it need to be scalable?

You can find a list of country codes on Wikipedia.

I have updated my code, by scalable i mean to run the check just once instead of running it multiple times checking from 6 letters, down to 1 letter.

If am to check only a single number i wont bother much, but i want to run the check_phone() inside an array that contains hundreds of different numbers and pull their countries one by, so i need the check_phone() to be able to run speedily without being sluggish or script execution time out issues

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.