为了拆分字符串,我使用了以下代码。
$string = "-sev*yes-sev1*no-sev2*yes";
split('[-*]', $string).
由于拆分已被弃用,请您建议另一种方法将字符串拆分为数组。我试过爆炸,但它不符合我的目的。 输出应该看起来像,
Array
(
[0] => sev
[1] => yes
[2] => sev1
[3] => no
[4] => sev2
[5] => yes
)
感谢大家的回复..我试过了preg_split('[-*]', $string)
。它具有明智的字符串特征。我已将其修改为preg_split('/[-*]/', $string)
。它运作良好。如果你能解释我的不同,那就太棒了。
答案 0 :(得分:5)
您可以使用explode或preg_split。
答案 1 :(得分:5)
您可以将preg_split用作:
$string = "-sev*yes-sev1*no-sev2*yes";
$array = preg_split('/-|\*/', $string,-1, PREG_SPLIT_NO_EMPTY);
或
$array = preg_split('/-|\*/', $string);
或者您也可以使用strtok:
$tok = strtok($string, "-*");
$array = array();
while ($tok !== false) {
$array[] = $tok;
$tok = strtok("-*");
}
修改强>
在
preg_split('[-*]', $string);
[ ]
被视为分隔符而不是char类,因此您使用正则表达式-*
进行拆分,这意味着零个或多个连字符。
但在
preg_split('/[-*]/', $string);
您正在使用正则表达式[-*]
这是一个匹配*
或-
答案 2 :(得分:3)
Preg_split正是您要找的。 p>
答案 3 :(得分:1)
只需将分割更改为preg_split。
答案 4 :(得分:1)
分裂主要有两个替代品:
preg_split()
。explode()
,因为它比preg_split()
答案 5 :(得分:1)
好吧,假设您的预期输出为array('sev', 'yes', 'sev1', 'no', 'sev2', 'yes')
,则可以使用preg_split
:
$data = preg_split('/[-*]/', $string, -1, PREG_SPLIT_NO_EMPTY);
或者,考虑到您看起来有关键字段(意味着第一个yes
绑定到sev
,第一个no
绑定到sev1
等),你可能最好做多次爆炸:
$result = array();
$data = explode('-', $string);
foreach ($data as $str) {
if (empty($str)) continue;
list ($key, $value) = explode('*', $str);
$result[$key] = $value;
}
或者将其转换为网址样式细分,并使用parse_str
...
$tmp = str_replace(array('-', '*'), array('&', '='), $string);
parse_str($tmp, $result);
这两个都会生成如下数组:
array(
'sev' => 'yes',
'sev1' => 'no',
'sev2' => 'yes',
);
答案 6 :(得分:0)
使用preg_split()
。
$string = "-sev*yes-sev1*no-sev2*yes";
$result = preg_split('/[-*]/', $string);