2013-10-14 7 views
1

Извините, если это вопрос новичков. Позволяет сказать, что у меня есть эта строка (имя значения и сервер могут меняться): Также я забыл сказать, что знаю длину «что-то».php string find substrings

$str='something-name:Jon,server:localhost' 

Теперь я должен вытащить значения: «Jon» и «localhost» и поместить их в переменные.

Что я делаю сейчас:

if ((strpos($str, 'something')) !== false){ 
    $par_name = strpos($str, 'name:'); 
    if ($par_name !== false){ 
     $name = substr($n, 20); 
    } 
} 

Сейчас:

$name == 'Jon,server:localhost' 

Вместо этого мне нужно получить только имя и после того, как сервер подстроки.

$name == 'Jon' 
$server == 'localhost' 

Я думаю, мне нужно найти точное значение для третьего параметра substr. Я не знаю.

Благодарим за ответы.

ответ

3

Вы можете легко сделать это с explode(). Разделить строку с запятой в качестве разделителя, разделить части с двоеточием в качестве разделителя, и захватить часть перед двоеточием в обеих частях:

$str='something-name:Jon,server:localhost'; 
list($part1, $part2) = explode(',', $str); 
list(,$name) = explode(':', $part1); 
list(,$server) = explode(':', $part2); 

Demo!

+0

Да, действительно, это путь более чистый, чем мой, но использование списка иногда требует читаемости. Здесь не так, наоборот, здесь читаемость. –

+0

Теперь я хочу дать лучший ответ обоим, черт возьми. – Carondimonio

+0

@Carondimonio: У меня есть демо и короче. * cough *: P –

2

Это просто быстрый пример того, как можно достичь этого:

$str='something-name:Jon,server:localhost' 

$explode = explode(',', $str); 

$explodePart1 = explode(':', $explode[0]); 

$explodePart2 = explode(':', $explode[1]); 

$name = explodePart1[1] 
$server = explodePart2[1]; 
+0

Это было полезно Aswell, спасибо большое , – Carondimonio