Search code examples
phpsearchlinear-search

PHP - Search first names as well as full name


At the moment my code searches data, but you need to type in the full name to display a result. I think I need to split my fullnames into first names and lastnames. So either can be searched and found.

I want it to find and display profiles according to fullname OR firstname

-I need it to display results for people of that first name. But in my csv file (which is where the data is stored), the full names are stored E.g. "Bob Gerald"

I am guessing I need to separate values in the loop to search first names as well? Im not really sure.. Any help would be greatly appreciated.

Here is what I have:

//This gathers the values from the form (search bar) and assigns it to the variable $SearchThis
//isset()
$SearchThis = isset($_POST['Search']) ? $_POST['Search'] : '';
//empty()
$SearchThis = !empty($_POST['Search']) ? $_POST['Search'] : '';



// Grabs the csv file (and its existing data)  and makes it into an array
$csv = array();
$lines = file('data/StaffData.csv', FILE_IGNORE_NEW_LINES);
foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
}



//A new array which will display the search results
$new_csv = array(); 

//This displays which rows have matched the search (it is put in an array)

//Looks through full names
$keys = array_keys(array_column($csv, 0), $SearchThis);  //  original code
foreach($keys as $index) {                               // Iterate over the keys
    $new_csv[] = $csv[$index];                           // Copy the matching rows to our new array
}
//Looks through phone numbers
$keys = array_keys(array_column($csv, 1), $SearchThis);  // original code
foreach($keys as $index) {                               // Iterate over the keys
    $new_csv[] = $csv[$index];                           // Copy the matching rows to our new array
}
//Looks through gender
$keys = array_keys(array_column($csv, 2), $SearchThis);  // original code
foreach($keys as $index) {                               // Iterate over the keys
    $new_csv[] = $csv[$index];                           // Copy the matching rows to our new array
}
//Looks through Birthday
$keys = array_keys(array_column($csv, 3), $SearchThis);  // original code
foreach($keys as $index) {                               // Iterate over the keys
    $new_csv[] = $csv[$index];                           // Copy the matching rows to our new array
}

//Looks through Type of work
$keys = array_keys(array_column($csv, 4), $SearchThis);  // original code
foreach($keys as $index) {                               // Iterate over the keys
    $new_csv[] = $csv[$index];                           // Copy the matching rows to our new array
}

Solution

  • Please use this to search in the fullname column:

    $new_csv = array_filter($csv, function ($item) use($SearchThis) {
        //Match the full name
        if ($item[0] === $SearchThis) {
            return true;
        }
        //Split the fullname by space characters into array
        //and see if it contains the $SearchThis 
        return in_array($SearchThis, preg_split("/[\s]+/", $item[0]));
    });
    

    I hope this will help you.