Php 如何在字符串中找到多个变量?

Php 如何在字符串中找到多个变量?,php,Php,我有一个脚本,它检查变量$hello,看它是否包含“粉色”、“蓝色”和“红色”。对于它包含的每个变量,都会在字符串$finalstring中添加一些文本 有没有更简单的方法 $hello = "pink*blue*red*orange"; $finalstring = ""; if (strpos($hello, "pink") == true) { $finalstring .= "_pink"; } if (strpos($hello, "blue") == true) {

我有一个脚本,它检查变量
$hello
,看它是否包含“粉色”、“蓝色”和“红色”。对于它包含的每个变量,都会在字符串
$finalstring
中添加一些文本

有没有更简单的方法

$hello = "pink*blue*red*orange";
$finalstring = "";

if (strpos($hello, "pink") == true) {
    $finalstring .= "_pink";
}

if (strpos($hello, "blue") == true) {
    $finalstring .= "_blue";
}

if (strpos($hello, "red") == true) {
    $finalstring .= "_red";
}

echo $finalstring; // output: _pink_blue_red

您可以使用要检查的所有值(
$types
)创建一个数组,遍历所有值并检查它们是否可以在字符串中找到

$hello = "pink*blue*red*orange";
$finalstring = "";
$types = array('pink', 'blue', 'red');
foreach ($types as $type) {
  if (stristr($hello, $type)) {
    $finalstring .= '_' . $type;
  }
}

您可以使用要检查的所有值(
$types
)创建一个数组,遍历所有值并检查它们是否可以在字符串中找到

$hello = "pink*blue*red*orange";
$finalstring = "";
$types = array('pink', 'blue', 'red');
foreach ($types as $type) {
  if (stristr($hello, $type)) {
    $finalstring .= '_' . $type;
  }
}


使用正则表达式

$hello = "pink*blue*red*orange";
$colors = array('pink', 'blue', 'orange'); 
if(!preg_match_all(sprintf("/%s/", join('|', $colors)), $hello, $match))
{
    die('not found any color');
}
$finalstring = '_'. join('_', $match[0]);
echo $finalstring; // _pink_blue_orange

使用正则表达式

$hello = "pink*blue*red*orange";
$colors = array('pink', 'blue', 'orange'); 
if(!preg_match_all(sprintf("/%s/", join('|', $colors)), $hello, $match))
{
    die('not found any color');
}
$finalstring = '_'. join('_', $match[0]);
echo $finalstring; // _pink_blue_orange

您不能将
*
替换为
.
?这只是一个示例,但不,替换
*
不会摆脱
“橙色”
<代码>“橙色”表示一个未知的文本字符串,所以我不能先替换
*
,然后再替换
orange
。为什么不使用数组来存储这些值呢?你不能用
.
替换
*
?这只是一个例子,但不,替换
*
不能摆脱
“橙色”
<代码>“orange”表示未知的文本字符串,因此我不能只替换
*
,然后替换
orange
。为什么不使用数组来存储这些值呢?我知道这代码更少,但效率更高吗?它似乎做了与我的代码完全相同的事情,因为它必须通过相同的字符串3次来检查变量。有没有办法检查所有三合一STRPO?@supercolville:如果你打算添加更多案例,这会更好,因为你只需向阵列添加一个新项目,而不是一个全新的
If
条件。在这种情况下,效率是你不应该过分担心的事情。我知道这是更少的代码,但它更有效吗?它似乎做了与我的代码完全相同的事情,因为它必须通过相同的字符串3次来检查变量。有没有办法检查所有三合一STRPO?@supercolville:如果你打算添加更多案例,这会更好,因为你只需向阵列添加一个新项目,而不是一个全新的
If
条件。在这种情况下,效率是你不应该过分担心自己的。
$hello = "pink*blue*red*orange";
$colors = array('pink', 'blue', 'orange'); 
if(!preg_match_all(sprintf("/%s/", join('|', $colors)), $hello, $match))
{
    die('not found any color');
}
$finalstring = '_'. join('_', $match[0]);
echo $finalstring; // _pink_blue_orange