如何检查第一次出现是-(减号)还是,(逗号)
实际上,如果第一次出现是-(减号),我想爆炸一个字符串
list($key, $value) = explode('-', $searchParam, 2);
它应该爆炸$searchParam = 'pattern-64587989';
它不应该爆炸$searchParam = 'pattern,6458-7989';
如果第一个符合条件是逗号,我不想爆炸。
我想要高效的代码,因为在同一页面上已多次使用它。
例如,使用变量:
$exploded = explode('-', $searchParam, 2);
然后使用if条件对数组中的值进行计数:
if (count($exploded) > 1) {
list($key, $value) = $exploded;
} else {
// Something else
}
这会查找两个字符的位置,并先检查哪个。使用strpos()
的主要目的是,如果找不到,它将返回false。因此,它使用?: PHP_INT_MAX
表示是否未找到逗号,然后将其设置为最大整数,因此比较将认为逗号已超过-。
$searchParam = 'pattern-64587989';
$searchParam = 'pattern,6458-7989';
// Set values to ensure they contain something
$key = '';
$value = '';
if ( (strpos($searchParam, ",") ?: PHP_INT_MAX) > strpos($searchParam, "-") ) {
list($key, $value) = explode('-', $searchParam, 2);
}
echo $key."/".$value;
[here,您可以用它来执行条件检查。
// Example 1:
$str1 = "pattern-64587989";
$res = substr($str1, 7, 1) == '-' ? explode('-',$str1) : $str1;
var_dump($res);
// Exmple 2:
$str2 = "pattern,6458-7989";
$res = substr($str2, 7, 1) == '-' ? explode('-',$str2) : $str2;
var_dump($res);
我能想到的最好的办法是首先对输入进行正则表达式检查,以确定是否应该分割输入。然后,如果输入在破折号前没有逗号,则有条件地进行拆分,否则只需保留整个输入即可。
$searchParam = 'pattern-64587989';
$vals = [$searchParam];
if(!preg_match("/^[^,-]*,[^-]*-.*$/", $searchParam)) {
$vals = explode("-", $searchParam, 2);
}
print_r($vals);
此打印:
Array
(
[0] => pattern
[1] => 64587989
)
使用pattern,6458-7989
打印输入:
Array
(
[0] => pattern,6458-7989
)
您可以简单地测试第一个分解部分是否包含逗号:
$parts = explode('-', $searchParam);
if (count($parts) > 0 && strpos($parts[0], ',') === false) {
list($key, $value) = $parts; // or better: [$key, $value] = $parts;
} else {
// Nope
}