|
Posted by Jim Carlock on 02/24/06 23:03
On 23 Feb 2006 00:29:48 GMT,
"Chung Leong" <chernyshevsky@hotmail.com> posted:
> The function you need is in_array() although an associative array
> would be more efficient. E.g.
$good_hash = array(
'good' => true,
'better' => true,
'best' => true,
...
);
if(!array_key_exists(strtolower($word), $good_word)) {
...
}
Thanks, Chung. It seems like it's best to store everything inside the
array as lowercase and then fill in some appropriate variables for.
I initially started out with mixed-case arrays. For example:
// array of states
function Create_USA_States_Array() {
$aStates = array(
// http://www.usps.com/ncsc/lookups/usps_abbreviations.html
array("Alabama", "AL"),
array("Alaska", "AK"),
array("Arizona", "AZ"),
array("Arkansas", "AR"),
array("California", "CA"),
array("Colorado", "CO"),
array("Connecticut", "CT"),
array("Deleware", "DE"),
array("Florida", "FL"),
array("Georgia", "GA"),
array("Hawaii", "HI"),
array("Idaho", "ID"),
array("Illinois", "IL"),
array("Indiana", "IN"),
array("Iowa", "IA"),
array("Kansas", "KS"),
array("Kentucky", "KY"),
array("Louisiana", "LA"),
array("Maine", "ME"),
array("Maryland", "MD"),
array("Massachusetts", "MA"),
array("Michigan", "MI"),
array("Minnesota", "MN"),
array("Mississippi", "MS"),
array("Missouri", "MO"),
array("Montana", "MT"),
array("Nebraska", "NE"),
array("Nevada", "NV"),
array("New Hampshire", "NH"),
array("New Jersey", "NJ"),
array("New Mexico", "NM"),
array("New York", "NY"),
array("North Carolina", "NC"),
array("North Dakota", "ND"),
array("Ohio", "OH"),
array("Oklahoma", "OK"),
array("Oregon", "OR"),
array("Pennsylvania", "PA"),
array("Rhode Island", "RI"),
array("South Carolina", "SC"),
array("South Dakota", "SD"),
array("Tennessee", "TN"),
array("Texas", "TX"),
array("Utah", "UT"),
array("Vermont", "VT"),
array("Virginia", "VA"),
array("Washington", "WA"),
array("Washington, D.C.", "DC"),
array("West Virginia", "WV"),
array("Wisconsin", "WI"),
array("Wyoming", "WY"));
return($aStates);
}
The function established to return a state name works as follows:
// this function is incomplete
// PURPOSE: RETURN statename from parameter passed in
// INPUT: City-State String, OPTIONAL default string
// RETURNS: empty string if invalid parameter requested
// $sDS represents default state name to return
// $sCS = $_GET['citystate'];
// "Charlotte NC" or "Charlotte North Carolina" or "Charlotte" or
// "usertyped garbage"
function GetStateNameFromCityState($sCS, $sDS = "") {
$sStateAbbr = trim($sCS);
$iLen = strlen($sStateAbbr);
// first check to see if empty string
if (strlen($iLen < 2)) { return($sDS); }
if (GetStateFromAbbr($sStateAbbr)) {
// a valid abbreviation was passed in
return(GetStateFromAbbr($sStateAbbr));
}
$aStates = Create_USA_States_Array();
// possible state name in parameter so check for a state name,
// before checking against abbreviations
foreach ($aStates as $aState) {
// state name: $aState[0]
if (stristr($sStateAbbr, $aState[0]) != FALSE) {
// return state name
return($aState[0]);
}
}
// no valid statename found, so start abbreviation checks
// first determine if there's an abbreviation present
// explode(separator, string to separate)
$aWords = explode(" ", $sStateAbbr);
$yAbbrFound = FALSE;
// check for abbreviations
foreach ($aWords as $sWord) {
if (strlen($sWord) == 2) {
// assume a 2-letter word represents a state abbreviation
$sStateAbbr = $sWord;
$yAbbrFound = TRUE;
break;
}
}
if ($yAbbrFound) {
} else {
// no abbreviation to check, so return empty string
return($sDS);
}
// now validate abbreviation found
// COULD this fail? NEEDS MORE TESTING.
foreach ($aStates as $aState) {
// now check against abbreviations
if (stristr($sStateAbbr, $aState[1]) != FALSE) {
// return state name in proper formatting
return($aState[1]);
}
}
// return empty string when it all fails (default state)
return($sDS);
}
Haven't fully tested the user-typed garbage being passed in, but
my question specifically involves configuring the state array, and
alternative suggestions for this.
Note, that the above function actually returns what's found inside
the predefined array, rather than what's found in the address-bar.
This in effect, should get me words proper for HTML presentation,
where I don't have to mess with capitalizing ALL state abbrev's,
or capitalizing the first word of anything.
I still need to test the code above some more, so if anyone happens
to catch a flaw please point it out.
And again back to the question in the topic... "Lowercase Versus
Mixed-case" words inside the array that holds the states and state
abbreviations. Anyone here that knows of a better way to do this?
Another array might get created, as the list of targeted cities is over
100 right at the moment. To possibly identify each city to a proper
state.
I plan on getting something going whereby a new array appears as
follows:
"city name", iStateNumber
"state number" represents an integer 0 to 50 (51 states).
Duplicate "city name"'s could exist, so the database, combines
the "city name" and the "state number" into an index. The "state
number" ends up being a pointer to the StateID in the State
database. So continuing along the lines of the indexed arrays,
as presented by Chung Leong, how would I go about indexing
such an array as above and would indexing be appropriate for
such?
Thanks, Chung Leong. I did put the indexed array into play in
another function where the number of items is greater. I didn't
know how to work it into this particular array (or an array with
multiple fields with duplicate records).
Jim Carlock
Post replies to the group.
Navigation:
[Reply to this message]
|