какую функцию следует использовать для получения строки перед конкретным символом?

$variable ="Vanesh@abc";

if (strpos($variable, '@') !== false) {
$variable = substr($variable, 0, strpos($variable, "@"));
}
echo $variable;

ИЛИ ЖЕ

  $display_name = 'Vanesh@abc';
if( false !== strstr($display_name,"@",true) ) {
$display_name = strstr($display_name,"@",true);
}
echo $display_name;

Какой из них я должен использовать, чтобы получить вывод как Vanesh? Будет лучше, если будут какие-то соображения относительно скорости и производительности.

Обновить: Может случиться так, что входная переменная может иметь символ @ или не иметь. Если нет, то строка будет записана так, как она есть в обоих фрагментах кода.

-3

Решение

Я бы пошел с обоими. Сначала проверьте, существует ли @, а затем, чтобы получить имя.

Как руководство sais:

Если вы хотите только определить, встречается ли конкретная игла в
стог сена, используйте более быструю и менее интенсивную функцию памяти strpos ()
вместо.

Вот так:

$display_name = 'Vanesh@abc';
if(strpos($display_name, '@') !== false) { // we only need to know if the @ occurs here.
$display_name = strstr($display_name,"@",true); // here we wish to retrieve the first name
}
echo $display_name;

Укажите, однако, что, если отображаемое имя: «@». Или «@abc», без ванеша перед ним? Это приемлемое решение?

1

Другие решения

Итак, вот фактическое сравнение скорости. Победителем является оптимизированная версия вашей первой функции: Сравнение скорости

function orig1($variable)
{
$s = strpos($variable, '@');
if ($s !== false)
{
$variable = substr($variable, 0, $s);
}

return $variable;
}

function orig1_unop($variable)
{
if (strpos($variable, '@') !== false)
{
$variable = substr($variable, 0, strpos($variable, '@'));
}

return $variable;
}

3.000.000 раундов

orig1 0.36397695541382s
orig1_unop 0.49177098274231s

Ускорение происходит благодаря экономии времени на повторное вычисление одних и тех же значений снова и снова.

1

Вот смесь strstr и str_replace.
Strstr возвращает то, что есть после @ и str_replace используют это, чтобы заменить его ничем.

$var ="Vanesh@abc";

echo str_replace(strstr($var, '@') , "", $var);

Вроде бы довольно быстро. https://3v4l.org/ngCG7/perf#output

0
По вопросам рекламы [email protected]