如何使用PHP查明字符串中是否存在子字符串?

时间:2011-06-01 05:26:45

标签: php string

我知道很多关于这个问题的问题,但我找不到针对我的具体问题的正确答案。

我有一个搜索字符串 - “1 | 1”

我有一个包含以下值的数组 - “a”=> “1 | 1”,“b”=> “2 | 1,1 | 1”,“c”=> “3 | 2,2 | 1”

我想要做的只是找出数组中是否存在搜索字符串,它应该返回数组键。如果有多个数组项具有搜索字符串,则应返回所有数组项。

在这个例子中,我希望得到“a”和“b”,但是当我使用strpos()时,它只给我“a”。

我该如何解决这个问题?

编辑**

这是我的代码

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 个答案:

答案 0 :(得分:2)

注意!==运营商。我们还要检查类型..

$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);

答案 1 :(得分:2)

只需使用preg_grep

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

strpos只会“找到第一次出现字符串的位置”。

看看array_keys。我认为这将更接近你想要的。或者,如果它无法执行您可能需要的“部分匹配”,则可能必须使用array_maparray_filter

答案 4 :(得分:0)

我能想到的最简单的方法是使用PHP本机函数array_key()

以下是它的工作原理:

$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'

更新:

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

答案 5 :(得分:0)

你走了:

<?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");
        }
    }
?>

通过这个例子你会得到:

a
b
a1

答案 6 :(得分:0)

array_filter()就是您所需要的。请尝试以下代码。

$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); } )));

输出

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

答案 7 :(得分:0)

您可以使用带有search_value参数的array_keys来搜索数组中的所有值。

此示例将获取所有匹配的精确值的键:

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

(OR)

此示例将获取所有部分值的键

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

print_r($resKeys);
?>