2015-07-07 3 views
0

У меня есть эта функция, которая ищет строки, как это:Условный в поиске и замене функции PHP

<unique>342342342</unique> 
<unique>5345345345345435345</unique> 
<unique>4444</unique> 

функция:

$pattern = '/<unique>(.*?)<\/unique>/'; 
$response = preg_replace_callback($pattern,function($match){ 
    $value = intval(trim($match[1])/200); 
    return '<unique>'.$value.'</unique>'; 
},$xml); 

и изменить число в два раза (п/2). Все идет нормально.

Но мне нужно добавить условие, чтобы проверить, имеет ли число более 10 цифр, если true, то делает изменение, если нет, нет.

Я попытался это, но нет ... все экземпляры де '4444' удаляются

$pattern = '/<unique>(.*?)<\/unique>/'; 
$response = preg_replace_callback($pattern,function($match){ 

     $valueunique = trim($match[1]); 
     if(strlen($valueunique) >= 11){ 
      $value = intval($valueunique/200); 
      return '<unique>'.$value.'</unique>'; 
      } 
},$xml); 
+0

Кажется, что все в порядке. В чем дело? – Toto

+0

@Toto все экземпляры de '' удаляться. – JPashs

+0

ОК, я вижу, взгляните на мой ответ. – Toto

ответ

1

Просто переместите возвращение снаружи, если блок:

$xml = '<unique>342342342</unique> 
<unique>5345345345345435345</unique> 
<unique>4444</unique>'; 

$pattern = '/<unique>(.*?)<\/unique>/'; 
$response = preg_replace_callback($pattern,function($match){ 
     $value = trim($match[1]); 
     if(strlen($value) >= 11){ 
      $value = intval($value/200); 
     } 
     return '<unique>'.$value.'</unique>'; 
},$xml); 

echo "response = $response\n"; 

Выход:

response = <unique>342342342</unique> 
<unique>26726726726727180</unique> 
<unique>4444</unique> 
+0

хорошо, спасибо – JPashs

+0

@JPashs: Добро пожаловать, рад, что это помогает. – Toto

Смежные вопросы