2015-05-16 3 views
0

У меня есть строка вроде aa/bb/cc/dd/55/44. Теперь я преобразовал его в массив, используя функцию разрыва.PHP получить строку после определенной строки в массиве

explode("/","aa/bb/cc/dd/55/44"); 

Здесь, я хочу, чтобы всегда получить строку после dd. Строка динамическая, т. Е. dd может быть в любой позиции, но сразу после dd я хочу получить строку i.e. 55. Как я могу достичь этого с помощью PHP?

+0

Что вы пробовали? Вы можете использовать простые 'for' и проверять каждый элемент, если он соответствует' dd'. После этого вы можете вернуть 'index + 1' –

+0

Вы что-то пробовали? – Rizier123

+0

Есть доступные способы, которые получают его в несколько строк, но возможно ли это в одной строке? –

ответ

1

Однако, для записи, если вы хотите безопасно улова всех вхождения вашего шаблона (не только последний матч), что-нибудь в между dd/ и следующая первая /, то вы можете использовать следующие:

$re = "~(?<=dd/).*?(?=/)~"; 
$str = "aa/bb/cc/dd/55/44/dd/66/"; 

preg_match_all($re, $str, $matches); 
print_r($matches[0]); 
// output: Array ([0] => 55 [1] => 66) 
+0

Я просто хочу получить только первый матч. –

+1

Ну, тогда вы можете использовать: 'echo isset ($ matches [0] [0])? $ matches [0] [0]: "not found"; '. (desc: '$ matches [0] [0]' относится к первому вхождению, если оно есть :) – someOne

+0

'preg_match ($ re, $ str, $ matches);' будет работать? только для первого совпадения. –

1

Простой с foreach()

$myarray = explode("/","aa/bb/cc/dd/55/44"); 

foreach ($myarray as $k => $v) { 
     if ($v === "dd") { 
      $myvalue = $myarray[$k+1]; 
      //break out once value is found as 
      //author requested only first result 
      break; 
     } 
} 
+0

Спасибо за ваш ответ, но я ожидал код, который получает строку после 'dd' в одной строке. –

+0

Необходимо использовать isset(), чтобы он не выдавал неопределенную ошибку индекса, если «dd» находится в конце. '$ myvalue = isset ($ myarray [$ k + 1])? $ myarray [$ k + 1]: ''; ' – Ulver

+0

он сказал, что всегда будет значение после dd –

2
<?php 
    $str_arr = explode("dd/","aa/bb/cc/dd/55/44"); 
    $str = end($str_arr); 
?> 

В $ str вы получите часть строки после 'dd /' i.e '55/44 '. Надеюсь, поможет.

+0

Я просто хочу получить 55, что здесь, не/44 –

+0

+0

не так ли получается 44? –

0

Мой подход:

/** 
* Return string after needle if it exists. 
* 
* @param string $str 
* @param mixed $needle 
* @return string 
*/ 
function str_after($str, $needle) 
{ 
    $pos = strpos($str, $needle); 

    return ($pos !== false) ? substr($str, $pos + strlen($needle)) : $str; 
} 
Смежные вопросы