Sina Sima
Sina Sima

Reputation: 29

Given an array in PHP where the contents are strings separated by commas, how do I extract the first part of string?

I have a file called "single.txt". The contents look like:

Array ( [0] => Ada Lovelace,F,96,ISTJ,Linux,24,99 
        [1] => Adele Goldberg,F,65,ENFJ,Windows,50,70 
        [2] => Alan Turing,M,41,ESTP,Mac OS X,31,50...
      )

First, when a new person signs up, it adds them with them with their info to the end of the .txt file. I want to be able to check whether they've already signed up and I've written the following function:

function returnPerson($content){
    global $person_name;

    for($i=0 ; $i < count($content); $i++){

        if($person_name == array_slice($content,0,0)){
            $person = $content[$i];
            return $person;

        } else continue;

    }

}

But that doesn't seem to be working.

How can I compare the first part of the string, i.e. the name part, to the name of the person checking?

Thanks!

Upvotes: 1

Views: 71

Answers (3)

Alex Howansky
Alex Howansky

Reputation: 53573

You can loop over the elements in the array like this:

foreach ($content as $record) {
    // $record now contains string "Ada Lovelace,F,96,ISTJ,Linux,24,99"
}

You can extract fields from a comma-separated string by using the explode() function:

$string = "Ada Lovelace,F,96,ISTJ,Linux,24,99";
$fields = explode(',', $string);
// $fields[0] now contains "Ada Lovelace"
// $fields[1] now comtains "F"
// ... etc

Putting those together, you'll get something like:

foreach ($content as $record) {
    $fields = explode(',', $record);
    if ($fields[0] == $name_to_check) {
        // found it
    }
}
// didn't find it

Upvotes: 0

ctct_mike
ctct_mike

Reputation: 76

Try something like this... you may have to modify it slightly depending on how your text is coming in, but should get you on the right track :)

function returnPerson($content){
    global $person_name;

    foreach($content as $profile) {
        $profile = explode(',', $profile);

        if ($person_name == $profile[0]) {
            // Person Exists
            return $profile;
        }
    }

    return false; // person does not exist
}

Upvotes: 1

nice ass
nice ass

Reputation: 16719

You're "slicing" the same array while you're looping it. It looks like you just need a simple strpos():

if(strpos($content[$i], $person . ',') === 0){
  return ...
}

Here's another way that doesn't require a for loop:

$names = array_map('reset', array_map('str_getcsv', $content));

if(in_array($person, $names)){
  ...
}      

It works because your data seems to use the CSV format

Upvotes: 0

Related Questions