数组A:
486 987
数组B:
247-16-02-2009 486-16-02-2009 562-16-02-2009 1257-16-02-2009 486-16-02-2009
我想搜索并列出在数组B中匹配的所有数组A元素,例如:486-16-02-2009(两次)。
答案 0 :(得分:3)
您可以通过将$arrayA
插入模式来使用正则表达式。这将在$arrayA
项目中找到$arrayB
个项目:
$pattern = implode("|", $arrayA);
$result = preg_grep("/$pattern/", $arrayB);
要仅在$arrayB
项的开头匹配,请使用^
锚"/^$pattern/"
。
如果那里可能有特殊的模式字符,您可能希望通过$arrayA
运行preg_quote()
元素。
答案 1 :(得分:2)
你可以做这样的事情,但它可能没有像使用像array-intersect那样的php内置函数,因为我们正在进入循环地狱。如果任一阵列太大,您的脚本将慢慢爬行。
foreach ($arrB as $values) {
foreach ($arrA as $compare) {
if (substr($values, 0, strlen($compare)) == $compare) {
//do stuff
}
}
}
答案 2 :(得分:1)
你必须走两个阵列搜索每个案例:
<?php
$needle = [486, 987];
$haystack = ["247-16-02-2009", "486-16-02-2009", "562-16-02-2009", "1257-16-02-2009", "486-16-02-2009"];
$result = array_filter($haystack, function($item) use ($needle){
foreach($needle as $v){
if(strpos($item, strval($v)) !== false){
return true;
}
}
return false;
});
print_r($result);
答案 3 :(得分:0)
与其他两个答案有些相似,但这将是我的方法:
$matches = array(); // We'll store the matches in this array
// Loop through all values we are searching for
foreach($arrayA as $needle){
// Loop through all values we are looking within
foreach($arrayB as $haystack){
if(strpos($needle, $haystack) !== false){
// We found a match.
// Let's make sure we do not add the match to the array twice (de-duplication):
if(!in_array($haystack, $needle, true)){
// This match does not already exist in our array of matches
// Push it into the matches array
array_push($matches, $haystack);
}
}
}
}
注意:此解决方案使用in_array()
来阻止匹配重复。如果您希望匹配多个值的匹配项多次显示,则只需删除!in_array(...)
作为条件的if语句。