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); });

demo

如果你想让 $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);