简体   繁体   中英

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, ie the name part, to the name of the person checking?

Thanks!

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
}

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM