[英]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_map
或array_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); } )));
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.