我有一個字符串,它包含我需要提取的一些值。這些值中的每一個都被一個普通字符包圍。PHP - 最有效的方式來提取基於給定分隔符的子串?
將所有這些值提取到數組中的最有效方法是什麼?
例如,給出以下字符串:
stackoverflowis%value1%butyouarevery%value2%
我想獲得含有value1
和value2
我有一個字符串,它包含我需要提取的一些值。這些值中的每一個都被一個普通字符包圍。PHP - 最有效的方式來提取基於給定分隔符的子串?
將所有這些值提取到數組中的最有效方法是什麼?
例如,給出以下字符串:
stackoverflowis%value1%butyouarevery%value2%
我想獲得含有value1
和value2
$s = "stackoverflowis%value1%butyouarevery%value2%";
preg_match_all('~%(.+?)%~', $s, $m);
$values = $m[1];
給一個嘗試爆炸的數組。像$ array = explode('%',$ string);
LE:
<?php
$s = 'stackoverflowis%value1%butyouarevery%value2%';
$a = explode('%', $s);
$a = array_filter($a, 'strlen'); // removing NULL values
$last = ''; // last value inserted;
for($i=0;$i<=count($a);$i++)
if (isset($a[$i+1]) && $a[$i] <> $last)
$t[] = $last = $a[$i+1];
echo '<pre>'; print_r($t); echo '</pre>';
爆炸不會提取值,它只會將字符串拆分爲數組 –
$string = 'stackoverflowis%value1%butyouarevery%value2%';
$string = trim($string, '%');
$array = explode('%' , $string);
preg_match_all('/%([^%]+)%/', $s, $match);
var_dump($match[1]);
$str = "stackoverflowis%value1%butyouarevery%value2%";
preg_match_all('/%([a-z0-9]+)%/',$str,$m);
var_dump($m[1]);
array(2) { [0]=> string(6) "value1" [1]=> string(6) "value2" }
使用explode
,並採取從所得陣列的奇數索引的值。你表示你想要最有效的方法,這將比正則表達式解決方案更快。
$str = 'stackoverflowis%value1%butyouarevery%value2%';
$arr = explode('%', $str);
$ct = count($arr);
for ($i = 1; $i < $ct; $i += 2) {
echo $arr[$i] . '<br />';
}
在內存或CPU時間方面效率最高?在PHP中效率最高? – sanmai
爲什麼這個問題得到否定的投票? – MrWhite