【问题标题】:First value comma separated string第一个值逗号分隔的字符串
【发布时间】:2016-08-17 09:52:24
【问题描述】:

会有一个字符串有一个或多个,根本没有逗号。

$str = "a, b";

如果逗号之前包含逗号,我如何获取第一个值?这就是我所做的。

if(preg_match('/[,]+/', $str, $f)) {
     $firstVal = $f[0];
}

注意:/^[^,]+/ 更适合吗?

【问题讨论】:

  • explode(',',$str)[0] 可以解决问题
  • 在调用任何基于正则表达式的东西之前,先寻找一个简单的解决方案
  • 为什么没有人使用preg_match
  • @Becky,这太过分了。正则表达式需要更多处理,因此除非您喜欢这样,否则请选择高效、简短的解决方案。
  • [,]+ 匹配一个或多个逗号……如果您试图匹配 before 逗号的值……

标签: php


【解决方案1】:

你可以使用strtok:

$firstVal = strtok($str, ",")

【讨论】:

  • 非常适合这个用例的被忽视和模糊的功能!
  • 谢谢+10。如果我需要检查字符串在 $firstVal = strtok($str, ",") 之前是否有逗号怎么办?
  • 您可以通过以下方式进行检查:if (strpos($str, ",") !== false)
【解决方案2】:

有几种方法可以实现这一点。

  1. 使用substr()strpos()

    echo substr($str,0,strrpos($str,','));
    
  2. 使用explode()

    $result = explode(',',$str);
    echo $result[0];
    
  3. 使用strstr()

    echo strstr($str, ',', true);
    

【讨论】:

  • 这取决于您的期望。假设输入只是没有逗号的“abcd”。它应该输出abcd吗?还是空白,因为没有逗号?
  • 如果逗号 -> 获取第一个值。如果没有逗号,则使用完整的字符串。
  • 在这种情况下,分解代码可以正常工作。你不需要任何额外的 if。
【解决方案3】:

展开、验证和打印。

$values = explode(',',$str);
if(key_exists(0,$values) &&  trim($values[0])!=""){
  echo $values[0];
}  

【讨论】:

  • 你能解释一下key_exists(0,$values) && $values[0]!=""吗?\
  • ","
  • explode always 返回一个包含至少一个元素的数组,即使对于空字符串也是如此。您可能唯一感兴趣的是检查values[0] 是否为空,这意味着$str 一开始就为空。
  • @deceze 很好,但是空间呢?
  • 好吧,那是一个空格。 var_dump(explode(",", " "))array(1) { [0] => string(1) " " }
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多