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

时间:2013-09-05 08:47:03

标签: php ajax arrays filtering unset

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

我使用关键字,因此在后端脚本中我会爆炸AJAX提供的字符串。

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

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

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

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

我在很多方面尝试过,最后一个是一个简单的foreach循环:

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

我读到了关于array_filter和类似的函数,但是 - 我的意思是 - 我无法想象它为什么不能这样工作。

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

3 个答案:

答案 0 :(得分:1)

数组的值将在$value而非$key[$value]

尝试

if ( strlen( $value ) < 3 ) {

答案 1 :(得分:1)

您可以使用array_filter

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

它将返回一个包含所有关键字大于2个字符的数组。 Haven没有对它进行测试,但我认为你明白了。

当然,普通的foreach会这样做,但是array_filter代码较少,因此更易于维护和阅读。就速度而言,我猜不会有任何重大差异。

答案 2 :(得分:1)

您的循环几乎就在那里,但$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;'));