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, потому что &
не следует пробел в этой ситуации.