PHP-使用特定的过滤器从数组中删除所有元素


PHP - Delete all elements from array with a specific filter

我正在构建一个AJAX驱动的智能搜索引擎。

我使用关键字,所以在后端脚本中,我分解AJAX提供的字符串。

(字符串是搜索输入字段的值)

$keywords = $_POST["keywords"];
$keywords = strtolower($keywords);
$keyword = explode(" ", $keywords);

正如您现在看到的,我有一个名为$keyword的数组,其中包含所有的关键字。

现在,我必须从数组中删除值,这将导致不相关的结果。更明确地说:我想删除所有值长度小于3的行。

我尝试了很多方法,最后一个是简单的前臂循环:

foreach ($keyword as $key => $value) {
if ( strlen($key[ $value ]) < 3 ) {
    unset($keyword[$key]);
   }
}

我读过array_filter和类似的函数,但是——我的意思是——我无法想象为什么它不能以这种方式工作。

如果你有任何想法,请给我写一个答案感谢您的关注

循环即将完成,但是$value不是$key变量中的键。如果您print_r您的$keywords,您将看到$key变量将是=>左侧的字符串,$value位于右侧。

快速修复:

if( strlen($value) < 3 )

更好的解决方案:

$keywords = array_filter($keywords, function($x) { return strlen($x) >= 3; });

嵌套修复

$keywords = array_filter(explode(' ',strtolower($_POST)), function($x) { return strlen($x) >= 3; });

替代修复(如果你有一个太旧的PHP版本,你不能做上面的匿名函数)

$keywords = array_filter(explode(' ',strtolower($_POST)), create_function('$x', 'return strlen($x) >= 3;'));

您可以使用array_filter:

$keywords = array_filter($keywords, function($keyword) {
    return strlen($keyword) >= 3;
});

它将返回一个所有关键字都大于2个字符的数组。还没有测试过,但我想你已经明白了。

当然,一个普通的foreach可以做到这一点,但array_filter的代码更少,因此更容易维护和阅读。就速度而言,我想不会有太大的差异。

数组的值将在$value而不是$key[$value]中。

尝试

if ( strlen( $value ) < 3 ) {