PHP - самый эффективный способ извлечь подстроки на основе данного разделителя? - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть строка, содержащая некоторые значения, которые мне нужно извлечь. Каждое из этих значений окружено общим символом.

Какой самый эффективный способ извлечь все эти значения в массив?

Например, с учетом следующей строки:

stackoverflowis%value1%butyouarevery%value2%

Я хотел бы получить массив, содержащий value1 и value2

Ответы [ 6 ]

3 голосов
/ 08 сентября 2011
$s = "stackoverflowis%value1%butyouarevery%value2%";
preg_match_all('~%(.+?)%~', $s, $m);
$values = $m[1];

preg_match_all

1 голос
/ 08 сентября 2011

Используйте explode и возьмите нечетные значения из полученного массива.Вы указали, что вам нужен самый эффективный метод, и это будет быстрее, чем решение регулярных выражений.

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

$ct = count($arr);

for ($i = 1; $i < $ct; $i += 2) {
    echo $arr[$i] . '<br />';
}
1 голос
/ 08 сентября 2011
$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 голос
/ 08 сентября 2011
$string = 'stackoverflowis%value1%butyouarevery%value2%';
$string = trim( $string, '%' ); 
$array = explode( '%' , $string );
1 голос
/ 08 сентября 2011

Дайте попытку взорваться. Например, $ array = explode ('%', $ string);

LE:

<code><?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 '
';
0 голосов
/ 08 сентября 2011
preg_match_all('/%([^%]+)%/', $s, $match);
var_dump($match[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...