簡體   English   中英

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循環:

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

我了解了array_filter和類似的函數,但是-我的意思是-我無法想象為什么它不能以這種方式工作。

如果您有任何想法,請給我答復! 感謝您的關注

數組的值將在$value而不是$key[$value]

嘗試

if ( strlen( $value ) < 3 ) {

您可以使用array_filter

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

它將返回一個包含所有大於2個字符的關鍵字的數組。 還沒有測試過,但是我想你明白了。

當然,普通的foreach可以做到,但是array_filter的代碼更少,因此更易於維護和閱讀。 在速度方面,我想不會有太大的差異。

您的循環快到了,但是$value不是$key變量中的$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;'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM