是否可以更改此foreach php结构?
function token($word)
{
$result = $word;
$listconjunctions = ['and', 'on', 'in', 'or', 'which'];
foreach ($listconjuctions as $conjunctions){
$result = str_replace($conjunctions,'',$result);
}
return $result;
}
答案 0 :(得分:1)
你问Is it possible to changes this foreach php structure
,是的,没有必要
function token($word, array $listconjunctions=['and', 'on', 'in', 'or', 'which'])
{
return str_replace($listconjunctions,'',$word);
}
我已经为你修好了,我添加了在$word
字符串中为其删除一系列单词的功能。例如:
$string = "this that and the other which.";
echo token($string, ['that','the','this']);
输出
and other which.
我使用此代码测试了它,只是为了表明它们在功能上是等效的,默认情况下。
function token($word)
{
$result = $word;
$listconjunctions = ['and', 'on', 'in', 'or', 'which'];
foreach ($listconjunctions as $conjunctions){
$result = str_replace($conjunctions,'',$result);
}
return $result;
}
function token2($word, $listconjunctions=['and', 'on', 'in', 'or', 'which'])
{
return str_replace($listconjunctions,'',$word);
}
$string = "this that and the other which.";
echo token($string)."\n\n";
echo token2($string)."\n\n";
输出
this that the other .
this that the other .
亲自尝试
<强>另外强>
你原来的问题除了过于膨胀之外是这样的:
$listconjunctions
$listconjuctions
看到差异,你在foreach中使用的那个中遗漏了n
。
更高级
这是一个使用正则表达式和preg_replace
的更高级版本。正则表达式或简称正则表达式几乎就像另一种语言本身。它的作用是让你在字符串中进行模式匹配。
function token1($word, array $listconjunctions=['and', 'on', 'in', 'or', 'which'])
{
//escape words for use in regular expressions
$listconjunctions = array_map('preg_quote', $listconjunctions);
$pattern = [
'~\b('.implode('|',$listconjunctions).')\b~i', //words
'~\s{2,}~', //run on spaces, 2 or more. eg. 'one two'
'~\s+([^\w$])~' //spaces before punctuation. eg. 'word .'
];
return preg_replace($pattern, [' ', ' ', '$1'], $word);
}
$string = "this that and on and on the other which.";
echo token($string)."\n\n";
echo token1($string);
我将它命名为token1
,当它针对您的原始版本或精简版本运行时,我们会得到这些不同的输出。
//original functionality
this that the other .
//advanced version
this that the other.
所以你可以看到第二个删除所有不正确的空格。 [^\w$]
是一个字符组(或一组字符),[^
使其为负数,\w
匹配0-9a-za-Z_
,而$
只是一个美元符号。所以这意味着匹配任何东西,但不是0-9a-za-Z_$
。所以它匹配的是所有特殊字符和标点符号。
我之所以提到这一点是因为$
就是为了解释这个字符串之类的东西。
'this $5.00 is what you owe me for fixing your code.' //just kidding ... lol
哪个会成为这个而不说不匹配。
'this$5.00 is what you owe me for fixing your code.'
如果您遇到类似问题,可能需要在其中添加其他内容。只是我想不出任何其他标点符号应该始终以空格开头,虽然我肯定必须有一些。
我在原版中看到了“缺陷”,如果我忽略它,我感觉不对。
我希望这是有道理的。
干杯。