PHP,用 & 符号拆分字符串

PHP, Break Up String with Ampersand

我花了很多时间在网上搜索这个,所以在有人抨击我没有看之前......相信我,我已经。

问题:我正在使用一个包含“&”符号的字符串来显示两个名字。困难:有时我可能需要拉出左边的名字,或者右边的名字来显示。额外的困难是一些名称可能包含 HTML 个实体,这些实体当然也使用 & 符号。

示例:我可以使用像这样简单的东西:

"Fred & Wilma"

为了仅从字符串中获取 "Fred",我尝试使用 PHP 函数 STRPOS(),但我什么也没得到。

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

请注意,我在两边都使用了空格以避免 HTML 实体出现问题。

更有趣,检查我是否没有结果:

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

没有 return 值。这告诉我,从我可以在网上找到的各种文档等,我应该有一个有用的 $nPos 值。

如果我添加:

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

我在双引号中的文本后得到一个空白值。

我不知道如何在这里做我需要的事情。我需要获得“&”字符的位置,但我没有得到它。从那里显然需要使用 substr() 函数才能从 & 符号的左侧 and/or 右侧获取值。

如果你只需要名字,我会把它分解成一个数组:

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

这不会在 HTML 上意外拆分,因为在那种情况下 & 后面没有跟 space。

strpos 第一个参数是 haystack - 您在其中进行搜索的字符串,第二个参数是 needle - 您搜索的字符串。所以只需交换参数: $nPos = strpos( $names, " & " );

您可以找到更多信息here

您可以使用 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];