3

I know many questions already asked about this problem, but I was not able to find the right answer for my specific problem.

I have a search string - "1|1"

I have a array containing following values - "a" => "1|1", "b" => "2|1,1|1", "c" => "3|2,2|1"

All I want to do is just to find if the search string existed in the array, it should return the array key. If more than one array item has the search string, it should return all of them.

In this example, I am expecting to get both "a" and "b", but when I use strpos(), it only gives me "a".

How can I solve this problem?

Edit**

This is my code

function array_search_i($str, $array)
{
    $returnArray = array();
    foreach ($array as $key => $value) {
        if (strpos($str, $value) !== false) {
            array_push($returnArray, $key);
        }
    }
    return $returnArray;
}

8 Answers 8

2

Watch out for the !== operator. We have to check for the type as well..

$searchArray = array('2|2','1|1,3|3','1|1');
$search = '1|1';
foreach ($searchArray as $k=> $value) {
    if (strpos($value,$search) !== false) {
        $keysWithMatches[] = $k;
    }
}

print_r($keysWithMatches);
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks a lot for GWW and Freddy K. I have made a mistake by using wrong parameter order in strpos.
2

Simply use preg_grep.

print_r(preg_grep("/1\|1/", $array));

Comments

1
$keys = array();
foreach($a as $k=>$v){
    if(strpos($v,'1|1') !== false) $keys[] = $k;
}

2 Comments

I did exactly lie this, but im only getting "a", not "b"
Oh sorry I had a type it should be strpos($v,'1|1')
0

strpos will only "Find position of first occurrence of a string ".

Look at array_keys. I think this will be closer to what you want. Alternatively, if it's not able to do "partial matching" which is what you probably need, you may have to use array_map or array_filter.

Comments

0

Here you go:

<?php
    $array = Array("a" => "1|1", "b" => "2|1,1|1","c" => "3|1,2|1","d" => Array("a1" => "1|1"));
    array_walk($array,"find");

    function find($value, $key) {
        if (!is_array($value)) {
            if (preg_match("/\b1\|1\b/i",$value)) {
            echo $key .'<br />';
            }
        }
        else {
            array_walk($value,"find");
        }
    }
?>

By this example you will get:

a
b
a1

Comments

0

You can use array_keys with search_value parameter to search for all values in an array.

This example will get keys of all matching exact values:

<?php
$searchArray = array('2|2','1|1','1|1');
$search = '1|1';
print_r(array_keys($searchArray, $search));
?>

(OR)

This example will get the key of all the partial-values

<?php
foreach($array as $key => $val) {
   if(strpos($val,'green') !== false) {
      $resKeys[] = $key;
   }
}

print_r($resKeys);
?>

Comments

0

The simplest way I can think of is using the PHP native function array_key().

Here is how it works:

$array = array("a" => "1|1", "b" => "2|1,1|1", "c" => "3|2,2|1");

$result = array_keys($array,'1|1');

print_r($result);
// 'a' => '1|1'

UPDATE:

print_r($array[$result[0]]); // Makes more sense.
                             // '1|1'

Comments

0

array_filter() is what you need. Try the following code.

$array = array("a"=>array("1|1"), "b"=>array("2|1","1|1"), "c"=>array("1|2"));
var_dump(array_keys(array_filter($array, function ($elem) { return in_array('1|1', $elem); } )));

###OUTPUT

array(2) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.