PHP Classes
Icontem

File: nameParser.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of G. Miernicki  >  Name Parser  >  nameParser.php  
File: nameParser.php
Role: Class source
Content type: text/plain
Description: nameParser Class
Class: Name Parser
Parse a person full name to retrieve its parts
 

Contents

Class file image Download
<?php
/**
* @package        nameParser
* @version        1.1
* @author        Greg Miernicki, Keith Beckman, DLM
* LastModified:        2009:0128
* License:        LGPL
* @link            http://code.google.com/p/nameparser/
*/

class nameParser {

    
/**
    * Array of possible name titles.
    * @var    array
    */
    
private $titles;

    
/**
    * Array of possible last name prefixes.
    * @var    array
    */
    
private $prefices;

    
/**
    * Array of possible name suffices.
    * @var    array;
    */
    
private $suffices;

    
/**
    * The TITLE ie. Dr., Mr. Mrs., etc...
    * @var    string
    */
    
private $title;

    
/**
    * The FIRST Name
    * @var    string
    */
    
private $first;

    
/**
    * The MIDDLE Name
    * @var    string
    */
    
private $middle;

    
/**
    * The LAST Name
    * @var    string
    */
    
private $last;

    
/**
    * Name addendum ie. III, Sr., etc...
    * @var    string
    */
    
private $suffix;

    
/**
    * Full name string passed to class
    * @var    string
    */
    
private $fullName;

    
/**
    * Set to false by default, but set to true if parse() is executed on a name that is not parseable
    * @var    boolean
    */
    
private $notParseable;


    
/**
    * Constructor:
    * Setup the object, initialise the variables, and if instantiated with a name - parse it automagically
    *
    * @param string The Name String
    * @access public
    */
    
public function    __construct$initString "" ) {
        
$this->title         "";
        
$this->first         "";
        
$this->middle         "";
        
$this->last         "";
        
$this->suffix         "";

        
//$this->titles        = array('dr','doctor','miss','misses','mr','mister','mrs','ms','judge','sir','madam','madame');

        // added Military Titles
        
$this->titles        = array('dr','doctor','miss','misses','mr','mister','mrs','ms','judge','sir','madam','madame','AB','2ndLt','Amn','1stLt','A1C','Capt','SrA','Maj','SSgt','LtCol','TSgt','Col','BrigGen','1stSgt','MajGen','SMSgt','LtGen','1stSgt','Gen','CMSgt','1stSgt','CCMSgt','CMSAF','PVT','2LT','PV2','1LT','PFC','CPT','SPC','MAJ','CPL','LTC','SGT','COL','SSG','BG','SFC','MG','MSG','LTG','1SGT','GEN','SGM','CSM','SMA','WO1','WO2','WO3','WO4','WO5','ENS','SA','LTJG','SN','LT','PO3','LCDR','PO2','CDR','PO1','CAPT','CPO','RADM(LH)','SCPO','RADM(UH)','MCPO','VADM','MCPOC','ADM','MPCO-CG','CWO-2','CWO-3','CWO-4','Pvt','2ndLt','PFC','1stLt','LCpl','Capt','Cpl','Maj','Sgt','LtCol','SSgt','Col','GySgt','BGen','MSgt','MajGen','1stSgt','LtGen','MGySgt','Gen','SgtMaj','SgtMajMC','WO-1','CWO-2','CWO-3','CWO-4','CWO-5','ENS','SA','LTJG','SN','LT','PO3','LCDR','PO2','CDR','PO1','CAPT','CPO','RDML','SCPO','RADM','MCPO','VADM','MCPON','ADM','FADM','WO1','CWO2','CWO3','CWO4','CWO5');

        
$this->prefices        = array('bon','ben','bin','da','dal','de','del','der','de','e','la','le','san','st','ste','van','vel','von');
        
$this->suffices        = array('esq','esquire','jr','sr','2','i','ii','iii','iv','v','clu','chfc','cfp','md','phd');
        
$this->fullName        "";
        
$this->notParseable     FALSE;

        
// if initialized by value, set class variable and then parse
        
if ( $initString != "" ) {
            
$this->fullName $initString;
            
$this->parse();
        }
    }


    
/**
    * Destructor
    * @access public
    */
    
public function __destruct() {}



    
/**
    * Access Method
    * @access public
    */
    
public function    getFirstName() { return $this->first; }



    
/**
    * Access Method
    * @access public
    */
    
public function    getMiddleName() { return $this->middle; }



    
/**
    * Access Method
    * @access public
    */
    
public function    getLastName() { return $this->last; }



    
/**
    * Access Method
    * @access public
    */
    
public function    getTitle() { return $this->title; }



    
/**
    * Access Method
    * @access public
    */
    
public function    getSuffix() { return $this->suffix; }



    
/**
    * Access Method
    * @access public
    */
    
public function    getNotParseable() { return $this->notParseable; }



    
/**
    * Mutator Method
    * @access public
    * @param newFullName the new value to set fullName to
    */
    
public function    setFullName$newFullName ) { $this->fullName $newFullName; }



    
/**
    * Determine if the needle is in the haystack.
    *
    * @param needle the needle to look for
    * @param haystack the haystack from which to look into
    * @access private
    */
    
private function inArrayNorm$needle$haystack ) {
        
$needle trimstrtolowerstr_replace'.'''$needle ) ) );
        return    
in_array$needle$haystack );
    }



    
/**
    * Extract the elements of the full name into separate parts.
    *
    * @access public
    */
    
public function    parse() {
        
// reset values
        
$this->title         "";
        
$this->first         "";
        
$this->middle         "";
        
$this->last         "";
        
$this->suffix         "";
        
$this->notParseable     FALSE;

        
// break up name based on number of commas
        
$pieces        explode','preg_replace('/\s+/'' 'trim$this->fullName ) ) );
        
$numPieces     count$pieces );

        switch ( 
$numPieces ) {

            
// array(title first middle last suffix)
            
case    1:
                
$subPieces explode(' 'trim$pieces[0] ) );
                
$numSubPieces count$subPieces );
                for ( 
$i 0$i $numSubPieces$i++ ) {
                    
$current trim$subPieces[$i] );
                    if ( 
$i < ($numSubPieces-1) ) {
                        
$next trim$subPieces[$i+1] );
                    } else {
                        
$next "";
                    }
                    if ( 
$i == && $this->inArrayNorm$current$this->titles ) ) {
                        
$this->title $current;
                        continue;
                    }
                    if ( 
$this->first == "" ) {
                        
$this->first $current;
                        continue;
                    }
                    if ( 
$i == $numSubPieces-&& ($next != "") && $this->inArrayNorm$next$this->suffices ) ) {
                        if ( 
$this->last != "") {
                            
$this->last    .=    " ".$current;
                        } else {
                            
$this->last $current;
                        }
                        
$this->suffix $next;
                        break;
                    }
                    if ( 
$i == $numSubPieces-) {
                        if ( 
$this->last != "" ) {
                            
$this->last .= " ".$current;
                        } else {
                            
$this->last $current;
                        }
                        continue;
                    }
                    if ( 
$this->inArrayNorm$current$this->prefices ) ) {
                        if ( 
$this->last != "" ) {
                            
$this->last .= " ".$current;
                        } else {
                            
$this->last $current;
                        }
                        continue;
                    }
                    if ( 
$next == 'y' || $next == 'Y' ) {
                        if ( 
$this->last != "" ) {
                            
$this->last .= " ".$current;
                        } else {
                            
$this->last $current;
                        }
                        continue;
                    }
                    if ( 
$this->last != "" ) {
                        
$this->last .= " ".$current;
                        continue;
                    }
                    if( 
$this->middle != "" ) {
                        
$this->middle .= " ".$current;
                    } else {
                        
$this->middle =    $current;
                    }
                }
                break;

            default:
                switch( 
$this->inArrayNorm$pieces[1], $this->suffices ) ) {

                    
// array(title first middle last, suffix [, suffix])
                    
case    TRUE:
                        
$subPieces explode(' 'trim$pieces[0] ) );
                        
$numSubPieces =    count$subPieces );
                        for ( 
$i 0$i $numSubPieces$i++ ) {
                            
$current trim$subPieces[$i] );
                            if ( 
$i < ($numSubPieces-1) ) {
                                
$next trim$subPieces[$i+1] );
                            } else {
                                
$next "";
                            }
                            if ( 
$i == && $this->inArrayNorm$current$this->titles ) ) {
                                
$this->title $current;
                                continue;
                            }
                            if ( 
$this->first == "" ) {
                                
$this->first $current;
                                continue;
                            }
                            if ( 
$i == $numSubPieces-) {
                                if ( 
$this->last != "" ) {
                                    
$this->last .=    " ".$current;
                                } else {
                                    
$this->last $current;
                                }
                                continue;
                            }
                            if ( 
$this->inArrayNorm$current$this->prefices ) ) {
                                if ( 
$this->last != "" ) {
                                    
$this->last .= " ".$current;
                                } else {
                                    
$this->last $current;
                                }
                                continue;
                            }
                            if ( 
$next == 'y' || $next == 'Y' ) {
                                if ( 
$this->last != "" ) {
                                    
$this->last .= " ".$current;
                                } else {
                                    
$this->last $current;
                                }
                                continue;
                            }
                            if ( 
$this->last != "" ) {
                                
$this->last .= " ".$current;
                                continue;
                            }
                            if ( 
$this->middle != "" ) {
                                
$this->middle .= " ".$current;
                            } else {
                                
$this->middle $current;
                            }
                        }
                        
$this->suffix =    trim($pieces[1]);
                        for ( 
$i 2$i $numPieces$i++ ) {
                            
$this->suffix .= ", "trim$pieces[$i] );
                        }
                        break;

                    
// array(last, title first middles[,] suffix [,suffix])
                    
case    FALSE:
                        
$subPieces explode' 'trim$pieces[1] ) );
                        
$numSubPieces =    count$subPieces );
                        for ( 
$i 0$i $numSubPieces$i++ ) {
                            
$current trim$subPieces[$i] );
                            if ( 
$i < ($numSubPieces-1) ) {
                                
$next trim$subPieces[$i+1] );
                            } else {
                                
$next "";
                            }
                            if ( 
$i == && $this->inArrayNorm$current$this->titles ) ) {
                                
$this->title $current;
                                continue;
                            }
                            if ( 
$this->first == "" ) {
                                
$this->first $current;
                                continue;
                            }
                            if ( 
$i == $numSubPieces-&& ($next != "") && $this->inArrayNorm$next$this->suffices ) ) {
                                if ( 
$this->middle != "" ) {
                                    
$this->middle .= " ".$current;
                                } else {
                                    
$this->middle $current;
                                }
                                
$this->suffix $next;
                                break;
                            }
                            if ( 
$i == $numSubPieces-&& $this->inArrayNorm$current$this->suffices ) ) {
                                
$this->suffix $current;
                                continue;
                            }
                            if ( 
$this->middle != "" ) {
                                
$this->middle .= " ".$current;
                            } else {
                                
$this->middle $current;
                            }
                        }
                        if( isset(
$pieces[2]) && $pieces[2] ) {
                            if ( 
$this->last == "" ) {
                                
$this->suffix trim$pieces[2] );
                                for (
$s 3$s $numPieces$s++) {
                                    
$this->suffix .= ", "trim$pieces[$s] );
                                }
                            } else {
                                for (
$s 2$s $numPieces$s++) {
                                    
$this->suffix .= ", "trim$pieces[$s] );
                                }
                            }
                        }
                        
$this->last $pieces[0];
                        break;
                }
                unset( 
$pieces );
                break;
        }
        if ( 
$this->first == "" && $this->middle == "" && $this->last == "" ) {
            
$this->notParseable TRUE;
        }
    }
}

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products