簡體   English   中英

如何使用 PHP 找出字符串中是否存在 substring?

[英]How can I find out if a substring exists in a string using PHP?

我知道已經有很多關於這個問題的問題,但我無法為我的具體問題找到正確的答案。

我有一個搜索字符串 - “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;
}

注意!==運算符。 我們還必須檢查類型..

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

只需使用preg_grep

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

strpos只會“查找第一次出現的字符串的 position”。

看看array_keys 我認為這將更接近你想要的。 或者,如果它無法進行您可能需要的“部分匹配”,您可能必須使用array_maparray_filter

我能想到的最簡單的方法是使用 PHP 本機 function 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'

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

通過這個例子你會得到:

a
b
a1

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

OUTPUT

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

您可以使用帶有 search_value 參數的 array_keys 來搜索數組中的所有值。

此示例將獲取所有匹配的精確值的鍵:

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

(或者)

此示例將獲取所有部分值的鍵

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

print_r($resKeys);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM