PHPHelpPls
PHPHelpPls

Reputation: 13

PHP Array, Then check if in data

I'm checking every possible thing in the array to see if it contains something from the data specified.

Array:

$dogs = [
    "terrier" => "Terrier",
    "german_shepard" => "GS",
];

Code:

if ($stmt->execute()){
    while ($request = $stmt->fetch(PDO::FETCH_ASSOC)){
        foreach($dogs as $x => $x_value){
            if (strpos($request['Data'], $x) !== false) { // This bit!!
               $dog = $x_value;
            } else {
               $dog = 'Unknown dog';
            }
        }
    }
}

I then have a list, It can detect the first one in the list fine, but others it just calls 'Unknown dog' EG:

1 - Terrier

2 - Unknown Dog

3 - Unknown Dog

I want it to appear like:

1 - Terrier

2 - GS

3 - GS

I want the list to appear for each value found.

Upvotes: 1

Views: 60

Answers (2)

loadjang
loadjang

Reputation: 337

You may use PHP's native in_array function:

$dog = 'Unknown dog';
$key = in_array(strtolower($request['Data']), $dogs);
if($key >= 0){
    $dog = $dogs[$key];
}

Upvotes: -1

Don't Panic
Don't Panic

Reputation: 41820

You are overwriting the $dog variable for each item it checks in $dogs, so if there is anything that doesn't match after the one that does match, it will set it back to 'Unknown dog'. You should set $dog to a default value before your loop, and only overwrite it if it is found.

$dog = 'Unknown dog';
foreach($dogs as $x => $x_value){
    if (strpos($request['Data'], $x) !== false) { // This bit!!
        $dog = $x_value;
    }
}

There may be more than one value in $dogs that matches a particular instance of $request['Data']. If you use this code, $dog will be set to the last value from from $dogs that matches $request['Data']. If you want it to be set to the first matching value, then add a break; after $dog = $x_value; If you want something other than first or last, it will need to be more complex than this.

Upvotes: 2

Related Questions