Login   Register  
PHP Classes
elePHPant
Icontem

File: nameParser.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of G. Miernicki  >  Name Parser  >  nameParser.php  >  Download  
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
Author: By
Last change: new version 1.1
Date: 5 years ago
Size: 9,816 bytes
 

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;
        }
    }
}