如何删除包含某个子字符串的所有 PHP 数组元素?

Posted

技术标签:

【中文标题】如何删除包含某个子字符串的所有 PHP 数组元素?【英文标题】:How to remove all PHP array elements containing a certain sub-string? 【发布时间】:2012-05-15 11:55:09 【问题描述】:

好吧,我查了一些函数,但我似乎没有找到任何函数,

我想过滤一个数组以去除包含一些字符串的特定数组

这是一个例子:

$array(1 => 'January', 2 => 'February', 3 => 'March',);
$to_remove = "Jan"; // or jan || jAn, .. no case sensitivity
$strip = somefunction($array, $to_remove);
print_r($strip);

它应该返回

[1] => February
[2] => March

查找数组中所有值的子字符串的函数,如果找到子字符串,则从数组中删除该元素

【问题讨论】:

php.net/array_filter? PHP 的函数很容易找到,并以它们的作用命名... 在 7 个问题之后,其中一个至少必须有一个可以接受的答案。 @marc 是的,但是 php 没有关于这个函数的太多信息,我想看看它是如何工作的,就像我想要的那样 链接的 PHP 文档页面有很多关于如何使用该函数的示例。 手册页上的几十个例子,你还想要什么? 【参考方案1】:

您可以将array_filter() 与closure(内联函数)一起使用:

array_filter(
  $array,
  function ($element) use ($to_remove) 
    return strpos($element, $to_remove) === false;
  
);

(PHP 版本 >= 5.3)

【讨论】:

【参考方案2】:

您可以使用array_filter 和stripos

$array = array(1 => 'January', 'February', 'March');
print_r(array_filter($array, function ($var)  return (stripos($var, 'Jan') === false); ));

【讨论】:

通过使用 stripos 函数,您应该不必担心区分大小写。 最后一个问题,如何只返回包含特定字符串的数组? 然后将=== false 更改为!== false。在这种情况下return (stripos($var, 'fEb') !== false). 嘿,我有一个问题要问你。我不会提出一个新问题,而是先在这里试试运气。您所写的内容非常完美,例如,我怎样才能使其专门删除“a”。因为如果我这样运行它,它也会删除applebanana 的数组条目。如果你不介意再问一个问题。如果我要查找的单词位于名为 $common_words 的数组中怎么办?因此,在您的示例中,我有一个完整的单词数组,而不仅仅是“Jan”。【参考方案3】:

最简单的方法是使用array_filter。此函数接收要过滤的数组和一个回调函数,该函数根据接收到的值进行实际过滤:

function filter_func( $v )

  return ( ( $var % 2 ) == 0 );

$test_array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
print_r( array_filter( $test_array, "filter_func" ) );

希望有所帮助!

【讨论】:

以上是关于如何删除包含某个子字符串的所有 PHP 数组元素?的主要内容,如果未能解决你的问题,请参考以下文章

windows批处理问题,如何批量删除某几个子文件夹下面,文件名包含特定字符串的所有文件?

从变量中删除之前并包括某个子字符串的所有内容

如何在 PHP 中将数组元素转换为字符串?

PHP如何检查一个数组内是不是存在指定元素

如何在PHP中将数组元素转换为字符串?

PHP如何检查一个数组内是不是存在指定元素