As from the main project, wordsearch, here is the part that will either load the words from a xml file or from a input string on a web page. The grid class can be found here.
The basics of the word class, is to load a xml file (or via a user input string/s) and then generate words to search from the words that have either been loaded or inputted.
The word class can again be inherited so that each part can be re-done differently if there is another way to open a file etc.
I have included comments in the code, the __construct and __destruct are what happens when the class is created (via the “new” command) and destroyed respectively. Just a nice way to create the class/object and also clean up after itself.
The parameters that are passed to the __construct have default values, words.xml and 5, these can be over written when creating the class as shown in the code (instead of the maxSearchNum being 5 it is 3. But this gives more control over the construction of the class.
_words = array();
// if the filename is actually words from the input screen then just add in them instead
if (is_array($wordsOrFilename))
{
$_loadedWords = $wordsOrFilename;
}
else
{
// load the file of words into a array
$_loadedWords = $this->loadWords($wordsOrFilename);
}
// create a array of words to be searched for, max number as above
$this->_words = $this->searchableWords($_loadedWords, $maxSearchNum);
}
// unset the class words variable.
public function __destruct()
{
unset($this->_words);
}
// load in the words file
public function loadWords($filename)
{
$xmlFileLoad = simplexml_load_file($filename);
$returnWords = array();
$i=0;
foreach ($xmlFileLoad->word as $theword)
{
// only the string, because otherwise it would be a simpleXMLObject
$returnWords[$i++] = (string)$theword;
}
return $returnWords;
}
// searchableWords will create a array of words to search for from the searchablewords parameter, with maximum number of searchs (maxsearch)
public function searchableWords($searchableWords, $maxSearch)
{
$returnSearchWords = array();
$numberSearchWords = count($searchableWords);
// if the maxsearch value is greater or equal to the number of searchable words just fill in the return will all of the words
if ($numberSearchWords <= $maxSearch)
{
for ($i = 0; $i < $numberSearchWords; $i++)
{
$returnSearchWords[$i] = $searchableWords[$i];
}
}
else
{
// randomly pick out words from the array of searchable words
for ($i = 0; $i < $maxSearch; $i++)
{
// re-index the array
$searchableWords = array_values($searchableWords);
// obtain a random index value
$searchWordNum = rand(0, count($searchableWords)-1);
// insert into the return value
$returnSearchWords[$i] = $searchableWords[$searchWordNum];
// delete the word from the array
unset($searchableWords[$searchWordNum]);
}
}
return $returnSearchWords;
}
public function wordsArray()
{
return $this->_words;
}
public function printOutWords()
{
prit_r($this->_words);
}
};
$wordsToSearch = new Word("words.xml",3);
$wordsToSearch->printOutWords();
?>
and the output would be something like, of course since it is random generated, then could be the same words or different ones!!.
Array ( [0] => was [1] => sole [2] => old )