Dacobah
Dacobah

Reputation: 789

Search for a part of an array and get the rest of it in PHP

I've got an array called $myarray with values like these:

myarray = array ( 
    [0] => eat-breakfast 
    [1] => have-a-break
    [2] => dance-tonight
    [3] => sing-a-song
) 

My goal is to search for a part of this array and get the rest of it. Here is an example:

If i submit eat, I would like to get breakfast.

If i submit have, I would like to get a-break.

I just try but I'm not sure at all how to do it...

$word = 'eat';
$pattern = '/'.$word.'/i';
foreach ($myarray as $key => $value) {
   if(preg_match($pattern, $value, $matches)){
       echo $value;
   }
}
print_r($matches);

It displays:

eat-breakfastArray ( ) 

But I want something like that:

breakfast 

I think I'm totally wrong, but I don't have any idea how to proceed.

Thanks.

Upvotes: 0

Views: 190

Answers (4)

Nick Q.
Nick Q.

Reputation: 3986

This will both search the array (with a native function) and return the remainder of the string.

function returnOther($search, $array) {
    $found_key = array_search($search, $array);
    $new_string = str_replace($search . "-", "", $array[$found_key]);
    return $new_string;
}

Upvotes: 0

genesis
genesis

Reputation: 50976

use

stripos($word, $myarray)

<?php
$myarray = array ( 
    'eat-breakfast',
    'have-a-break',
    'dance-tonight',
    'sing-a-song'
) ;


function search($myarray, $word){
    foreach($myarray as $index => $value){
        if (stripos($value, $word) !== false){
            echo  str_replace(array($word,'-'), "", $value);
        }
    }
}

search($myarray, 'dance');
echo "<br />";
search($myarray, 'have-a');
echo "<br />";
search($myarray, 'sing-a');

demo

Upvotes: 2

Whetstone
Whetstone

Reputation: 1199

You're feeding the wrong information into preg_match, although I'd recommend using array_search().. Check out my updated snippet:

$word = 'eat';
$pattern = '/'.$word.'/i';
foreach ($myarray as $key => $value) {
   if(preg_match($pattern, $value, $matches)){
       echo $value;
   }
}
print_r($matches);

To get rid of that last bit, just perform a str_replace operation to replace the word with ""

Upvotes: 0

vicentazo
vicentazo

Reputation: 1799

I think the word you seek is at the beginning. Try this

function f($myarray, $word)
{
    $len = strlen($word);
    foreach($myarray as $item)
    {
        if(substr($item, 0, $len) == $word)
            return substr($item, $len+1);
    }

    return false;
}

Upvotes: 0

Related Questions