有可能改变foreach php结构吗?

时间:2018-04-07 03:20:48

标签: php foreach

是否可以更改此foreach php结构?

function token($word)
{
    $result = $word;
    $listconjunctions = ['and', 'on', 'in', 'or', 'which'];

    foreach ($listconjuctions as $conjunctions){
        $result = str_replace($conjunctions,'',$result);
    }
    return $result;
}

1 个答案:

答案 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 .

亲自尝试

https://3v4l.org/K83CL

<强>另外

你原来的问题除了过于膨胀之外是这样的:

$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.'

如果您遇到类似问题,可能需要在其中添加其他内容。只是我想不出任何其他标点符号应该始终以空格开头,虽然我肯定必须有一些。

我在原版中看到了“缺陷”,如果我忽略它,我感觉不对。

我希望这是有道理的。

https://3v4l.org/XhOlQ

干杯。