首页 > 解决方案 > 如果数组包含来自另一个数组的字符串,则删除

问题描述

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

$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.'<br>';
}

标签: phparrays

解决方案


另一种方法是使用 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

https://3v4l.org/PZ4I6


您也可以像这样将它捆绑到一个衬里:

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

推荐阅读