2011-09-08 34 views
2

我有一個字符串,它包含我需要提取的一些值。這些值中的每一個都被一個普通字符包圍。PHP - 最有效的方式來提取基於給定分隔符的子串?

將所有這些值提取到數組中的最有效方法是什麼?

例如,給出以下字符串:

stackoverflowis%value1%butyouarevery%value2% 

我想獲得含有value1value2

+1

在內存或CPU時間方面效率最高?在PHP中效率最高? – sanmai

+1

爲什麼這個問題得到否定的投票? – MrWhite

回答

3
$s = "stackoverflowis%value1%butyouarevery%value2%"; 
preg_match_all('~%(.+?)%~', $s, $m); 
$values = $m[1]; 

preg_match_all

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>'; 
+0

爆炸不會提取值,它只會將字符串拆分爲數組 –

1
$string = 'stackoverflowis%value1%butyouarevery%value2%'; 
$string = trim($string, '%'); 
$array = explode('%' , $string); 
+0

不正確:'array(4){[0] => string(15)「stackoverflowis」[1] => string(6)「value1」[ 2] => string(13)「butyouarevery」[3] => string(6)「value2」}' – k102

+1

@ k102從數組中讀取每個偶數項更有效率,然後希望%字符串的結尾,而不是在開始處。 –

+1

@tereško我不同意。你怎麼知道'$ array [1]'是需要的字符串之一而'$ array [0]'不是?所有我想說的 - 你的答案並不完整 – k102

0
preg_match_all('/%([^%]+)%/', $s, $match); 
var_dump($match[1]); 
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" } 
1

使用explode,並採取從所得陣列的奇數索引的值。你表示你想要最有效的方法,這將比正則表達式解決方案更快。

$str = 'stackoverflowis%value1%butyouarevery%value2%'; 
$arr = explode('%', $str); 

$ct = count($arr); 

for ($i = 1; $i < $ct; $i += 2) { 
    echo $arr[$i] . '<br />'; 
} 
相關問題