I created a html form in which you can enter your street address in a single string. How can I extract the street number, street name and street type (crescent, road, street etc) in PHP? I am not sure of the length of the string they will enter and it might not extract the correct information.
Please kindly help as I am new in coding in PHP.
Here is my code below:
$address = $_POST["address"];
echo "Your address is: $address <br>";
$addressSubstring = substr($address,0 , 15);
echo "Address: $addressSubstring <br>";
$strNumber = substr($addressSubstring, 0, 2);
$strName = substr($addressSubstring, 2, 8);
$strType = substr($addressSubstring, 8, 15);
echo "Your street number is: $strNumber <br>";
echo "Your street name is: $strName <br>";
echo "Your street type is: $strType <br>"
Keeping in mind that road types are "crescent|road|street":
Using regular expressions can solve the issue:
<?php
$address = '43 Willow Street'; // $_POST["address"] or '35 Hanover Crescent & 52 Longford Road';
preg_match_all("/(\d+)(.+?)(crescent|road|street)/i", $example, $out_arr);
// $no_of_addresses_found = count($out_arr[0]); // in case of future improvements
$strNumber = $out_arr[1][0]; // 43
$strName = trim($out_arr[2][0]); // Willow
$strType = $out_arr[3][0]; // Street
echo "Your street number is: $strNumber <br>";
echo "Your street name is: $strName <br>";
echo "Your street type is: $strType <br>"
You can't rely on getting substrings in fixed positions and lengths like in your code as they will change each time.
Without using any API or AI, the best you can do is create an array with road types (and their abbreviations) and check if any of that words is in the string.
For that you can use strpos for each word or regular expressions matching.
Then you can remove that word from the string, and get the position of the first space using strpos again. Then use that position to get the substring before the space (street number) and the substring after the space (street name).