Php 检查一个数组的所有字符串值是否相似或是另一个数组值的子字符串
在经历了许多类似的问题之后,发布这个查询,但是他们只考虑了数值。所以我的问题是: 我有两个数组-Php 检查一个数组的所有字符串值是否相似或是另一个数组值的子字符串,php,arrays,Php,Arrays,在经历了许多类似的问题之后,发布这个查询,但是他们只考虑了数值。所以我的问题是: 我有两个数组- $a = ["XYZ1250H100", "XYZ1280H130", "XYZ1250H150", "XYZ3300H200", "XYZ3350H200", "XYZ33350H280Ada08", "XYZ33450H300Ada08", "XYZ33508H406Ada08"]; 及 我需要查看数组$a的值是否存在于数组$b中,我尝试使用数组_diff()和数组_intersect(),
$a = ["XYZ1250H100",
"XYZ1280H130",
"XYZ1250H150",
"XYZ3300H200",
"XYZ3350H200",
"XYZ33350H280Ada08",
"XYZ33450H300Ada08",
"XYZ33508H406Ada08"];
及
我需要查看数组$a的值是否存在于数组$b中,我尝试使用数组_diff()和数组_intersect(),但这并没有解决问题。我想要的是,如果两个数组匹配,那么它应该返回true或false。例如,如果我们考虑$a>“XYZ1280H130”和$B->“XYZ1280H130A69B5”的值,那么它应该被视为一个匹配值(COZ前者是后者值的子字符串),True应该返回并且对于所有类似的值都是相同的。p>
我尝试了类似的方法,但每次都会返回数组$b的所有值:
$result = array_filter($a, function($item) use($b) {
foreach($b as $substring)
if(strpos($item, $substring) !== FALSE) return TRUE;
return FALSE;
});
如果我错过了什么,请告诉我。提前感谢。您可以使用阵列地图。
但这也会给你带来你想要的结果:
function test($a, $b) {
foreach($a as $first) {
foreach($b as $second) {
if(strpos($b, $a) !== false) return true;
}
}
}
使用正则表达式:
foreach($b as $search){
foreach($a as $sub){
if(preg_match("/$sub/",$search)){ echo "found ".$sub." in ".$search;}
}
}
通过@clearshot66修改上述答案之一以获得所需结果:
function match_them($a, $b){
foreach($b as $search){
foreach($a as $key => $val){
if(preg_match("/$val/",$search)){unset($a[$key]);}
}
}
return count($a);
}
var_dump(match_them($a, $b));
您可以添加一个您希望这个比较产生的输出的例子吗?如果$a的所有值都在$b中,那么它应该返回true,否则如果$b中缺少任何值,那么返回false。希望这是有意义的。有什么方法可以避免双重foreach循环,因为在两个循环之后我已经到达了比较点?不是真的,因为你需要遍历a中的每个项目,对照b中的每个项目进行检查(反之亦然)。
function match_them($a, $b){
foreach($b as $search){
foreach($a as $key => $val){
if(preg_match("/$val/",$search)){unset($a[$key]);}
}
}
return count($a);
}
var_dump(match_them($a, $b));