Choose a file to view:
index.php  word.php  functions.php


<?PHP
/* Copyright (c) 2011 Brad Greco [...]
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 
*/

function db_connect() {
    return new 
PDO('mysql:host=localhost;dbname=bgreco''*******''*******');
}

/* periodic( string $word, array $elements )
 * if $long is true, it will try to use more one-character symbols
 * Returns $word spelled using periodic table symbols
 * Returns false if this is impossible
 */
function periodic($string, &$array$long false) {
    if(
in_array_nocase($string$array) && $long)
        return 
elementCase($string$array);
    if(!
$string)
        return 
false
    
$size1 1;
    
$size2 2;
    if(
$long) {
        
$size1 2;
        
$size2 1;
    }
    
$h1 substr($string0$size1);
    
$h2 substr($string0$size2);
    
$t1 substr($string$size1);
    
$t2 substr($string$size2);
    
    
$r1 periodic($t1$array$long);
    if(
$r1 && in_array_nocase($h1$array))
        return 
elementCase($h1$array).$r1;
    
$r2 periodic($t2$array$long);
    if(
$r2 && in_array_nocase($h2$array))
        return 
elementCase($h2$array).$r2;
    if(
in_array_nocase($string$array) && !$long)
        return 
elementCase($string$array);
    return 
false;
}

function 
save($db$phrase) {
    
$db->prepare('INSERT INTO `spelled` (phrase) VALUES (?) ON DUPLICATE KEY UPDATE count=count+1')->execute(array($phrase));
}

function 
countspelled($db$phrase) {
    
$query $db->prepare('SELECT count FROM `spelled` WHERE phrase = ?');
    
$query->execute(array($phrase));
    return 
$query->fetchColumn();
}

// function taken from the PHP reference manual
function in_array_nocase($search, &$array) {
    
$search strtolower($search);
    foreach (
$array as $item)
        if (
strtolower($item) == $search)
            return 
TRUE;
    return 
FALSE;
}

function 
elementCase($string, &$array) {
    foreach( 
$array as $item) {
        if( 
strtolower($item) == strtolower($string))
            return 
$item;
    }
}

function 
best_matches($db$word) {
    
$min_distance 999;
    
$best_matches = array();

    
$query $db->prepare('SELECT words FROM bgreco.metaphone WHERE metaphone = ?');
    
$query->execute(array(metaphone($word)));
    
$match_list $query->fetchColumn();
    
    
$matches explode(','$match_list);
    foreach(
$matches as $match) {
        
$distance levenshtein(strtolower($word), strtolower($match));
        if(
$distance <= $min_distance) {
            if(
$distance $min_distance)
                
$best_matches = array();
            
array_push($best_matches$match);
            
$min_distance $distance;
        }
    }
    return 
$best_matches;
}


function 
elements($db$symbols_only false) {
    if (
$symbols_only)
        return 
$db->query('SELECT symbol FROM periodic')->fetchAll(PDO::FETCH_COLUMN);
    else
        return 
array_map('current'$db->query('SELECT symbol, name, number, mass FROM periodic')->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC));
}


?>