从PHP数组中删除多个元素的有效方法

从PHP数组中删除多个元素的有效方法,php,arrays,Php,Arrays,我有一个动态生成的文件名数组,可以这样说: $files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file"); 我想从阵列中丢弃几个特定的文件名: $exclude_file_1 = "meta-file-1"; $exclude_file_2 = "meta-file-2"; 所以,我总是知道要丢弃的元素的值,但不知道键 目前,我正在研究几种方法来实现这一点。 一种方法是使用数组过滤器和自定义函数: funct

我有一个动态生成的文件名数组,可以这样说:

$files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file");
我想从阵列中丢弃几个特定的文件名:

$exclude_file_1 = "meta-file-1";
$exclude_file_2 = "meta-file-2";
所以,我总是知道要丢弃的元素的值,但不知道键

目前,我正在研究几种方法来实现这一点。 一种方法是使用数组过滤器和自定义函数:

function excludefiles($v)
        {
        if ($v === $GLOBALS['exclude_file_1'] || $v === $GLOBALS['exclude_file_2'])
          {
          return false;
          }
        return true;
        }

$files = array_values(array_filter($files,"excludefiles"));
另一种方式是:

这两种方法都能产生预期的结果

我只是想知道哪一个更有效(为什么)?

或者有另一种更有效的方法可以做到这一点?

例如,也许有一种方法可以在数组搜索功能中使用多个搜索值?

您只需使用:

PHP的一个缺点是,它有无数的函数来完成特定的小事情,但有时这也很方便

当您遇到这样的情况时(您在找到相关函数后找到了解决方案,但不确定是否有更好的解决方案),最好在php.net上随意浏览函数列表侧栏。只需读取函数名就可以获得巨大的回报。

使用array_diff()

将返回一个数组,其中包含$exclude_file_数组中不在$files中的所有元素

$new_array = array_diff($files, $exclude_file_array);

它比您自己的函数和循环更好。

还有另一种方法可以从php数组中删除多个元素

而不是在整个数组中循环并取消其所有键

您可以使用如下方法销毁多个元素:

例如:

$array = array("a-file","b-file","meta-file-1", "meta-file-2", "meta-file-3");
对于单键:

unset($array["meta-file-1"]);
对于一个数组中的多个键:

unset($array["meta-file-1"], $array["meta-file-2"], $array["meta-file-3"] ....) and so on.

详细查看

非常感谢@Jon-我会记住你的建议。我确实在闲暇时读过函数列表,但从来没有注意过“diff”函数,因为我无法想象我会如何使用它们。。。现在我更清楚了!:)如果这些元素不是字符串而是对象或数组呢?我想删除那些属性与“a”和“b”相同的元素,例如?@Herokiller在这种情况下,你需要使用
array\u filter
。类似的,如果你需要从关联数组中过滤出特定的键:
$filtered=array\u diff\u key($arrayToFilter,array\u flip(['remove\u key\u 1',remove\u key\u\u 2'));
Hi Feanne-一旦找到了可接受的答案,就不需要更改标题。StackOverflow会在您点击绿色复选标记后处理好所有这些:)谢谢,这一点已经指出,我已经在我的代码中实现了。欢迎@Feanne,正如Jon所说的,首先浏览php.net,这将非常好。。干得好
$array = array("a-file","b-file","meta-file-1", "meta-file-2", "meta-file-3");
unset($array["meta-file-1"]);
unset($array["meta-file-1"], $array["meta-file-2"], $array["meta-file-3"] ....) and so on.