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