2012-12-07 234 views
0

有兩個數組:PHP:匹配另一個字符串數組的子字符串的字符串數組獲取數組值

$strings = array('Apple', 'Banana', 'Orange'); 
$substrings = array('pp', 'range'); 

我想它包含所有的字符串,匹配的子字符串數組:

Array 
(
    [0] => Apple 
    [2] => Orange 
) 

或用新的指標:

Array 
(
    [0] => Apple 
    [1] => Orange 
) 
+5

到目前爲止你有什麼? – jeroen

+1

哇,這比*僱傭者更適合僱傭*! – jeroen

+2

@ jeroen每個人都喜歡跳這種低垂的果實。得到他們代表點! – Sammitch

回答

3

想到一個簡單的解決方案:結合array_filterstrpos;

$strings = array('Apple', 'Banana', 'Orange'); 
$substrings = array('pp', 'range'); 

$result = array_filter($strings, function($item) use($substrings) { 
    foreach($substrings as $substring) 
    if(strpos($item, $substring) !== FALSE) return TRUE; 
    return FALSE; 
}); 

要重置索引,您可以使用array_values函數。

+0

我真的不明白「函數($ item)使用($ substrings)」部分,但它工作正常。謝謝! – Ben

+0

@Ben:這是[anonymous function/closure](http://php.net/closures) – knittl

+0

非常感謝! – Ben

1
$strings = array('Apple', 'Banana', 'Orange'); 
$substrings = array('pp', 'range'); 
$newarray = array(); 

foreach ($strings as $string) { 
    foreach ($substrings as $substring) { 
     if (strstr($string, $substring)) { 
      array_push($newarray, $string); 
     } 
    } 
} 

$newarray你有結果

0

您可以使用array_filter此:

$strings = array('Apple', 'Banana', 'Orange'); 
$substrings = array('pp', 'range'); 

$result = array_filter($strings, function($string) use ($substrings){ 
    foreach($substrings as $substring) 
     if(strstr($string, $substring) !== false) 
      return true; 
    return false; 
}); 

// $result is the result you want. 
+0

請注意,'strstr'可能會返回被認爲是false的字符串'「0」 - y – knittl

+0

@knittl啊,沒有考慮子字符串可能爲「0」的情況。謝謝,我解決了。 – Paulpro

0
$arr=array(); 
foreach($substrings as $item) 
{ 
    $result=array_keys($strings,$item); 
    if ($result) 
    { 
     $arr=array_merge($arr,$result); 
    } 
} 
+0

這將適用於匹配整個字符串,但不適用於所提及的部分匹配,如'pp'和'rang'。 – RobMasters

相關問題