从另一个数组中移除包含字符串的元素。

19 浏览
0 Comments

从另一个数组中移除包含字符串的元素。

所以这个想法是从一个数组中删除另一个数组中的一组数字,但只删除第一个,对于解决这个问题的任何帮助将不胜感激。

$my_array = array("Sandra Loor,593984076233","Adrian,593998016010","Lucas,593999843424");
function myFilter($string) {
    $to_remove = array("593984076233","593998016010");
    foreach($to_remove as $remove)  {
        return strpos($string, $remove) === false;
    }
}
$newArray = array_filter($my_array, 'myFilter');
foreach ($newArray as $val){
    echo $val.'';
}

0
0 Comments

问题的原因是代码中的过滤器函数在循环的第一次迭代中总是返回结果。解决方法是修改过滤器函数,当找到匹配的字符串时返回false,并在循环结束后返回true(即表示没有找到匹配的字符串)。

具体的代码如下:

function myFilter($string) {
    $to_remove = array("593984076233","593998016010");
    foreach($to_remove as $remove)  {
        if ( strpos($string, $remove) !== false )
            return false;
    }
    return true;
}

0
0 Comments

问题出现的原因是希望从一个数组中删除包含另一个数组中字符串的元素。解决方法是使用preg_grep函数搜索数组中要删除的项,然后使用array_diff函数将它们删除。

第一种解决方法是先使用preg_grep函数搜索要删除的项,然后使用array_diff函数将它们从数组中删除。具体实现如下:

$my_array = array("Sandra Loor,593984076233","Adrian,593998016010","Lucas,593999843424");
$to_remove = array("593984076233","593998016010");
$to_remove = "/" . implode("|", $to_remove) . "/";
$match = preg_grep($to_remove, $my_array);
$filtered = array_diff($my_array, $match);
var_dump($filtered);
// Lucas,593999843424

这段代码先将要删除的项转换为正则表达式,然后使用preg_grep函数搜索数组$my_array中符合正则表达式的项,并将匹配到的项保存在$match数组中。最后,使用array_diff函数将$match数组中的项从$my_array数组中删除,得到结果$filtered。

第二种解决方法是将上述代码合并为一行代码,具体实现如下:

$my_array = array("Sandra Loor,593984076233","Adrian,593998016010","Lucas,593999843424");
$to_remove = array("593984076233","593998016010");
$filtered = array_diff($my_array, preg_grep("/" . implode("|", $to_remove) . "/", $my_array));
var_dump($filtered);

这段代码在一行中完成了相同的操作,先使用preg_grep函数搜索数组$my_array中符合正则表达式的项,并将匹配到的项直接传递给array_diff函数进行处理,得到最终结果$filtered。

以上就是从给定内容整理出的问题出现的原因以及解决方法。

0