2012-12-07 183 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

相关问题