以下代码拆分字符串并选择包含最少3个字母的所有字母数字字。然而,我没有从字符串中获取所有单词,而是只想获得前3个有效单词,但问题在于循环。一旦从字符串中找到3个有效单词,我该如何停止循环。
PS。如果对同一件事有另一种方法,请建议。 感谢。
$string = "test test TEST test- -test _test blsdk.bldf,las";
$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
foreach ($keywords as $keyword){
if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
echo $keyword;
echo "<br />";
}
}
答案 0 :(得分:3)
添加一个变量,该变量在找到匹配关键字时计数。当计数器达到最大值时,打破foreach
循环
$string = "test test TEST test- -test _test blsdk.bldf,las";
$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
$i=0;
foreach ($keywords as $keyword){
if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
echo $keyword;
echo "<br />";
$i++;
if ($i==3) break;
}
}
答案 1 :(得分:1)
我认为您需要'break'关键字,请尝试此操作(代码未经过测试) -
$string = "test test TEST test- -test _test blsdk.bldf,las";
$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
$counter = 0;
foreach ($keywords as $keyword){
if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
echo $keyword;
echo "<br />";
$counter = $counter + 1;
if ($counter == 3) break;
}
}
答案 2 :(得分:1)
切断剩下的部分。
array_splice($arr, 3);
答案 3 :(得分:1)
我会使用不同的方法当你使用正则表达式检查你的结果时可能就是这样 使用preg_match_all为您完成工作更清晰,也许更有效率。
<?php
$string = "test le test TEST test- -test _test blsdk.bldf,las";
$arr=array();
preg_match_all('/\b([0-9A-Za-z]{3,})\b/', $string, $arr);
$keywords = array_slice(array_unique($arr[0]),0,3);
echo join('<br/>', $keywords);
在您提出的问题中,您要选择长度最短为3的字词,
但你用> 3
测试他们的长度。如果需要,相应地更改正则表达式。
注意:在原始测试中使单词具有唯一性。