<?php
$word = "conrad";
$str = array("Concept", "Support", "Design", "Fresh", "Aged","Glad");
$test = implode(" ", $str)";
echo "{$test}<br />;
foreach(str_split($word) as $position => $letter) {
if(stripos($str[$position], $letter) !== false) {
$message = "{$letter} found in ";
// This is very basic, but gets the job done quickly
$firstLetterFlag = false;
foreach(str_split($str[$position]) as $strLetter) {
if (
strtolower($strLetter) === strtolower($letter) &&
$firstLetterFlag === false
) {
$firstLetterFlag = true;
$strLetter = "<b>{$strLetter}</b>";
}
$message .= $strLetter;
}
$pos = stripos($str[$position], $letter);
$message .= " position {$pos}<br>";
echo $message;
}
}
var_dump(str_split($word), $position, $letter, $str[$position], $test);
您应该使用嵌套的foreach 并正确插入您的字符串。请注意,大括号不是必需的,但更恰当地表示正在插入一个变量。
编辑
正如Robby Cornelissen在cmets中指出的那样,他的方法比我的要快得多。我错误地说正则表达式几乎总是会减慢你的速度。正如他正确指出的那样,这是一个概括。诸如preg_replace 之类的正则表达式函数比其对应的str_replace 慢一点。然而,正如我的回答,更多的代码通常会比 Robby 的更少的代码运行得更慢。无论如何,我们谈论的是纳秒。带来速度是我的错误,因为在这种情况下可以忽略不计。
现在,我承诺更简洁的代码。玩了一会儿之后,很快就发现这不是递归函数的最佳用例。然而,函数式编程总是比过程式编程好,正如 Linus Torvalds 所说,“如果你需要 3 级以上的缩进,那么无论如何你都搞砸了,应该修复你的程序。”
<?php
$word = "conrad";
$str = ["Concept", "Support", "Design", "Fresh", "Aged","Glad"];
$test = implode(" ", $str)";
echo "{$test}<br />;
function findLetter($testWord = "", $wordList = [])
{
foreach(str_split($testWord) as $position => $letter) {
if(stripos($wordList[$position], $letter) !== false) {
echo buildMessage($letter, $wordList[$position]);
}
}
}
function buildMessage($letter, $word, $firstLetterFlag = false)
{
$message = "{$letter} found in ";
foreach(str_split($word) as $wordLetter) {
if (
strtolower($wordLetter) === strtolower($letter) &&
$firstLetterFlag === false
) {
$firstLetterFlag = false;
$wordLetter = "<b>{$wordLetter}</b>";
}
$message .= $wordLetter;
}
$pos = stripos($word, $letter);
return "{$message} position {$pos}<br>";
}
findLetter($word, $str);