Average Joe
Average Joe

Reputation: 4601

PHP: check if a value exists in array ( not as equal but as Part of )

Ok... right of the batt, let me clear what the question is not about. it is not about in_array.

Because as the PHP manual clearly explains, the function 'in_array' checks if a value exists in an array. But it does this check based on equality. It does not do as based on partial existence.

For example, if the value I'm looking is 'overflow' and I happened have an array like this

array('cnn','stackoverflow'),

the in_array would come back with a FALSE, telling me that overflow does not exist in the in values of this array, which in a way is TRUE. but also in a way, is FALSE.

To me, the string "overflow" do exists in the string stackoverflow". Therefore, it should have returned TRUE. Of course I cannot argue this point much.

Is there another function ( or an efficient one-liner) in PHP to get me what I want?

i'm looking for a solution something like this

array_filter($ary,'strlen');

which removes the empty lines from the $ary in a very efficient way.

I do not want to go thru the traditional way that is to go thru a foreach and do a comparison between the needle and the haystack using strpos. That solution I already know.

I'm looking for a one liner, like in the (strlen) example

Thx.

Upvotes: 1

Views: 841

Answers (2)

elixenide
elixenide

Reputation: 44831

Lame option: false !== strpos(implode($ary, '|'),'overflow') As long as the separator character (| here) isn't in your search string, this works.

More sophisticated option: count(array_filter( $ary, function($x) { return strpos($x, 'overflow'); } ) );

Edit: Second option full code looks like this:

$ary = array('cnn', 'stackoverflow'); // or whatever your data is
(bool) count(array_filter( $ary, function($x) { return strpos($x, 'overflow'); } ) );

The count() value will be 0 if not found, or positive if a match was found. So, you could use it in an if() statement, return it from a function, or whatever.

Upvotes: 1

Bhumi Shah
Bhumi Shah

Reputation: 9476

No function available in php which satisfy exact requirement of author. Developer has to write some code so you can try below code:

function array_check($arr, $keyword) {
foreach($arr as $index => $string) {
    if (strpos($string, $keyword) !== FALSE)
        return $index;
  } 
}
 var_dump(array_check(array('cnn','stackoverflow'),'overflow'));
 exit;

Upvotes: 2

Related Questions