2 PHP 个数组用于合并
2 PHP arrays for merge
如何从数组中删除元素,因为它在另一个数组中有部分元素?
换句话说,我需要比较 2 个数组可能 in_array
php 函数,但部分。
代码:
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
// return $b without 'hig' because in $a has partially 'hi'
非常感谢任何解决方案!
您可以使用array_filter()
to filter the array with anonymous function. Then a combination of array_diff()
and str_split()
来比较每个元素的每个字母。即使 $a
数组元素上的字母被打乱
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$b = array_filter($b, function($bElem) use($a) {
foreach ($a as $aElem) {
$diff = array_diff(
str_split($aElem),
str_split($bElem)
);
if (empty($diff)) return false;
}
return true;
});
print_r($b);
Loop
遍历数组,寻找match
。如果不匹配数组的任何元素,则 push
值。
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$result = $a;
foreach ($b as $bs) {
$flag = true;
foreach ($a as $as) {
if (strpos($bs, $as) !== false) {
$flag = false;
}
}
if($flag==true)
array_push($result, $bs);
}
return $result;
据我了解,您想要比较 $b 的字符串开头和 $a 的完整字符串
$b = array_udiff($b, $a,
function($x, $y) { return strcmp(substr($x, 0, strlen($y)), $y); });
如果你想让 $b
中的任何字符串都没有 $a
中的任何字符串作为子字符串。 demo
<?
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$b = array_filter($b, function($v) use($a){
foreach($a as $str){
if(strpos($v, $str) !== false)
return false;
}
return true;
});
print_r($b);
如何从数组中删除元素,因为它在另一个数组中有部分元素?
换句话说,我需要比较 2 个数组可能 in_array
php 函数,但部分。
代码:
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
// return $b without 'hig' because in $a has partially 'hi'
非常感谢任何解决方案!
您可以使用array_filter()
to filter the array with anonymous function. Then a combination of array_diff()
and str_split()
来比较每个元素的每个字母。即使 $a
数组元素上的字母被打乱
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$b = array_filter($b, function($bElem) use($a) {
foreach ($a as $aElem) {
$diff = array_diff(
str_split($aElem),
str_split($bElem)
);
if (empty($diff)) return false;
}
return true;
});
print_r($b);
Loop
遍历数组,寻找match
。如果不匹配数组的任何元素,则 push
值。
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$result = $a;
foreach ($b as $bs) {
$flag = true;
foreach ($a as $as) {
if (strpos($bs, $as) !== false) {
$flag = false;
}
}
if($flag==true)
array_push($result, $bs);
}
return $result;
据我了解,您想要比较 $b 的字符串开头和 $a 的完整字符串
$b = array_udiff($b, $a,
function($x, $y) { return strcmp(substr($x, 0, strlen($y)), $y); });
如果你想让 $b
中的任何字符串都没有 $a
中的任何字符串作为子字符串。 demo
<?
$a = ['abc', 'cde', 'efg', 'hi'];
$b = ['bce', 'ifg', 'hig'];
$b = array_filter($b, function($v) use($a){
foreach($a as $str){
if(strpos($v, $str) !== false)
return false;
}
return true;
});
print_r($b);