Syllith
Syllith

Reputation: 317

List all elements in array containing certain word in PHP

I'm attempting to make a search feature for my website using PHP. Right now, I have this code to create an array of all files in a directory, which works just fine, but I've hit a snag with my next step. I want it to now list all elements in that array that contain a certain word (the users search), this way I can do something with them later in HTML. My idea was to make a loop that runs strpos for each element and list only the ones it finds matches for. I've tried that, but it always gave me nothing. This is my honest attempt:

<?php
    $search = "Pitfall";

    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
    {
        if ($filename->isDir()) continue;

        foreach ($filename as &$result)
        {
            $pos = strpos($result, $search);

            if ($pos === true) {
                echo "$result\n";
            } 
        }
    }
?>

Thank you for any help

Upvotes: 1

Views: 96

Answers (1)

Chris
Chris

Reputation: 4810

I think your issue is with your conditional:

if ($pos === true)

strpos() does not return true. It returns the position of the string or false. See docs. You could instead use:

if ($pos !== false)

Edited:

The RecusiveIteratorIterator does not return a string. It returns an object. Here I am typecasting the object so that it gets the correct filename. From there, you don't need to iterate over again, as this is just a string at this point.

$search = "wp-config";

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
{
    $filename = (string) $filename;

    if (is_dir($filename)) continue;

    $pos = strpos($filename, $search);

    if ($pos !== false) {
        echo "$filename <br />";
    }
}

Upvotes: 1

Related Questions