如果不存在则在字符串开头添加子字符串

问题描述 投票:0回答:4

仅当该字符串开头尚无此文本时,我才想在字符串开头添加子字符串(文本)。

示例:

// let's say I want to add "Has" at beginning (if doesn't exist)

$string_1 = "AnaHasSomeApples"; // we need to add
$string_2 = "HsSomeApples"; // we need to add
$string_3 = "HasApplesAlready"; // already exists at the beginning

我试过这个:

$string = (strpos($string, 'Has') === false ? 'Has' : '') . $string;

我知道做到这一点并不难。

我更感兴趣的是找到最快的(根据时间,而不是代码行数)可能的方法。

php string substring prefix
4个回答
1
投票

您可以尝试这种方法 - 检查前 3 个字符是否不等于“Has”,如果等于,则只需使用 $string_1,否则将“Has”与其连接。

$string_1 = (substr( $string_1 , 0, 3 ) !== "Has") ? "Has".$string_1 : $string_1;
echo $string_1;

如果您希望“Has”不区分大小写,那么您可以在使用条件检查时使用strtolower

演示: https://3v4l.org/QEr1l


0
投票

我正在检查 Has 是否不在位置 0,然后在“Has”前面加上现有字符串
您可以使用三元运算符来实现此目的,

$string_1 = "AnaHasSomeApples"; // we need to add
$string_2 = "HsSomeApples"; // we need to add
$string_3 = "HasApplesAlready"; // already exists at the beginning

echo "string_1: ". (strpos($string_1,"Has") !== 0 ? "Has".$string_1: $string_1)."\n";
echo "string_2: ". (strpos($string_2,"Has") !== 0 ? "Has".$string_2: $string_2)."\n";
echo "string_3: ". (strpos($string_3,"Has") !== 0 ? "Has".$string_3: $string_3)."\n";

输出

string_1: HasAnaHasSomeApples
string_2: HasHsSomeApples
string_3: HasApplesAlready

演示


0
投票

您可能喜欢这个解决方案:

首先从主字符串中删除您想要的字符串,以确保该字符串不存在于主字符串的开头,然后尝试在原始字符串的开头添加您想要的字符串。

$string = 'HasSomeApples';

$result = 'Has' . ltrim($string, 'Has');

0
投票

它不太可能是最快的(尽管

preg_replace()
确实可以直接在数组上工作,如果你有的话),但如果你想避免编写条件,你可以使用正则表达式模式。除非您正在进行 100,000 次迭代,否则速度不太可能成为此任务真正关心的问题。

如果

Has
不在字符串的前面,请将其添加到字符串的前面。

代码:(演示

echo preg_replace('/^(?!Has)/', 'Has', $string);
// HasAnaHasSomeApples
// HasHsSomeApples
// HasApplesAlready
© www.soinside.com 2019 - 2024. All rights reserved.