2011-07-13 45 views
0

我有一個數組:如何搜索數組項與給定的字符串

$mainArr = ["SRI", "AIS", "GOW","SRI#AIS","SRI#GOW", "SRI#GOW#AIS"]; 

$strArr = ["SRI"]; 

我想搜索與給定的字符串數組元素的主陣列,這樣如果字符串匹配,應該得到相應的鍵,值對。

預期的O/P是:

Array[ 
    0->SRI 
    3->SRI#AIS 
    4->SRI#GOW 
    5->SRI#AIS#GOW 
] 

任何想法?

感謝, SRINIVAS

回答

1

輸出:

array(4) { 
[0]=> string(3) "SRI" 
[3]=> string(7) "SRI#AIS" 
[4]=> string(7) "SRI#GOW" 
[5]=> string(11) "SRI#GOW#AIS" 
} 
+0

我不認爲foreach會鍛鍊在這裏,bcoz我的原始數組有4000個元素和字符串數組包含10個elements.is有任何選項,如in_array?或array_search? – Srinivas

+0

如果你有這麼多的元素你必須創建另一個陣列,你會存儲所有匹配。 'in_array'和'array_search'不能直接使用,因爲你不想找到字符串*完全*與你的搜索模式相同 – k102

+0

我認爲使用數組過濾器與邏輯你已經提到的strpos將在這裏鍛鍊,而不是使用兩個foreach循環。 – Srinivas

0

使用array_filter

function filter($element) 
{ 
    return strpos($element, 'SRI') !== false; 
} 

$mainArr = array("SRI", "AIS", "GOW","SRI#AIS","SRI#GOW", "SRI#GOW#AIS"); 
$filteredArr = array_filter($mainArr, 'filter'); 
+0

感謝您的幫助。它非常有用:) – Srinivas

+0

沒問題:)請注意,在你用嚴格的不等式運算符測試的函數中,由於'strpos()'可能返回'false'或'0',這取決於你正在查找的子串因爲根本不存在,或者僅僅在字符串的開頭。 –

0

我的事情,我會幫助ü,,

$test=array(); 
     $mainArr = array("SRI", "AIS", "GOW","SRI#AIS","SRI#GOW", "SRI#GOW#AIS"); 
     $strArr = array("SRI"); 
     foreach ($mainArr as $key => $value) 
     { 
      $temp = explode('#',$value); 
      //$temp = $temp[0]; 
      if(in_array($temp[0],$strArr)) 
      $test[$key]=$value; 
     } 
     echo "<pre><span style='color:black; font-size:19;'>";print_r($test);echo "</span></pre>"; 
+0

in_array比'=='更好 – K6t

+0

哦...複雜... – k102

+0

@ k102:第二Forecho我不需要編碼的必要條件 – K6t