[英]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.