检查字符串中的单词是否与数组中的键匹配,然后替换它

时间:2014-03-31 01:23:09

标签: php

我想在字符串中找到一个关键字,我试图让脚本找到它然后替换它,但只有那个关键字(当然如果找到其他关键字,也要替换它们)。但我缺乏这项工作的经验,我试图只是为了练习。这是我的开始代码:

 $var = array(
    '{test1}' => 'something1',
    '{test2}' => 'something2',
    '{test3}' => 'something3'
);

$output = 'Please work it var {test1}!';

foreach($var as $element)
{
    if(strstr($output, $element) !== false)
    {
        echo 'not found<br>';
    }
    else
    {
        echo 'found<br>';
    }
}

现在我只是检查它是否找到,但我不明白,为什么它重复?它应该只说“找到”一次,然后说“找不到”,就像这样(找到,找不到,找不到)。

输出:

found
found
found

2 个答案:

答案 0 :(得分:1)

这对我来说有点混乱,因为strstr通常用来抓取一部分字符串。我认为更合适的方法是使用strpos。你也没有测试钥匙。甚至不知道它为什么说找到了。尝试

foreach($var as $key=>$val)
{

    if(strpos($output, $key) !== false)
    {
        //the key is contained in the output.
    }
    else
    {
        //not found
    }
}

如果你让我们知道你要替换的是什么,我可以看到帮助。也不要听大家告诉你用==来比较假。 ===或!==是适当的比较,因为还有其他东西== false(即.. 0 == false)。

但实际上,如果您尝试用值替换数组的键,则无需进行检查。

foreach($var as $key=>$val)
     $output = str_replace($key, $value, $output);

如果找不到密钥,则不会发生任何事情,如果是,则将其替换为相应的值。没有必要检查。

答案 1 :(得分:0)

首先,你的if语句错了。它没有找到它3次,这就是为什么它重复(你的阵列中每个项目3次):

if(strstr($output, $element) == false)

删除!。你所说的是,如果发现匹配,则回显&#34;未找到&#34;。

这是一个问题,第二个问题是你的代码不起作用。您正在寻找数组的值,而不是键。试试这个:

$var = array(
    '{test1}' => 'something1',
    '{test2}' => 'something2',
    '{test3}' => 'something3'
);

$output = 'Please work it var {test1}!';

foreach($var as $search => $replace)
{
    if(strstr($output, $search) == false)
    {
        echo 'not found<br>';
    }
    else
    {
        echo 'found<br>';
    }
}

这里的不同之处在于您可以使用foreach (array_expression as $key => $value)访问foreach中的数组键和值。我将数组键命名为$search,因为这是您正在寻找的。然后,您可以使用$replace访问数组值,以便在找到之后替换字符串:

$var = array(
    '{test1}' => 'something1',
    '{test2}' => 'something2',
    '{test3}' => 'something3'
);

$output = 'Please work it var {test1}!';

foreach($var as $search => $replace)
{
    if(strstr($output, $search) == false)
    {
        echo 'not found<br>';
    }
    else
    {
        echo 'found - (' . str_replace($search, $replace, $output) . ')<br>';
    }
}