PHP, разбить строку с помощью амперсанда

Я потратил много времени на поиск в интернете этого, поэтому, прежде чем кто-то захлопнет меня за то, что я не смотрю... поверь мне, у меня есть.

Проблема: я работаю со строкой, которая содержит амперсанд, для отображения двух имен. Сложность: иногда мне может понадобиться вытащить имя слева или имя справа для отображения. Дополнительная трудность заключается в том, что некоторые имена могут включать в себя объекты HTML, которые, конечно, также используют амперсанд.

Пример: я могу использовать что-то простое, например:

"Фред и Вильма"

Чтобы получить "Fred" из строки, я попытался использовать PHP-функцию STRPOS(), но ничего не получил.

$nPos = strpos( " & ", $names );

Обратите внимание, что я использую пробелы с обеих сторон, чтобы избежать проблем с сущностями HTML.

Веселее, проверяя, получаю ли я результаты:

if ( $nPos === 0 )
{
   echo "String ' $' not found in " . $names . "<br />";
}

Не возвращает значение. Это говорит мне из различной документации и тому подобного в Интернете, что я могу найти, что у меня должно быть значение для $nPos, которое полезно.

Если я добавлю:

echo "Position of string ' & ': " . $nPos . "<br />";

Я получаю пустое значение после текста в двойных кавычках.

Я в недоумении, как сделать то, что мне нужно здесь. Мне нужно получить положение символов " & ", но я не получаю его. Отсюда очевидно, что использование функции substr() необходимо для получения значений слева и / или справа от амперсанда.

3 ответа

Решение

strpos Первый параметр - это стог сена, в котором вы выполняете поиск, а второй - строка, которую вы ищете. Так что просто поменяйте местами параметры:$nPos = strpos( $names, " & " );

Вы можете найти больше информации здесь

Вы можете использовать explode($delimeter, $subject_string) функция, которая встроена в PHP. Например:

$names = 'firstName & lastName';
// use `&` as delimeter to split on and callback `trim` function on each array item
$names_array = array_map('trim',explode(' & ', $names)); 

теперь $names_array будет выглядеть так:

array(
  [0] => 'firstName'
  [1] => 'lastName'
)

и может быть доступ следующим образом:

$firstName = $names_array[0];
$lastName = $names_array[1];

Если вам просто нужны имена, я бы разбил их на массив:

$nameArray = explode(' & ', $names);

Это не будет неожиданно разделить на HTML, потому что & не следует пробел в этой ситуации.

Другие вопросы по тегам