我有这个函数来搜索这样的字符串:
<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);
并将数字更改为其一半(n / 2)。到目前为止一切都很好。
但是我需要添加一个条件来检查数字是否超过10位数,如果为真,则进行更改,如果不是,则不进行更改。
我尝试了这个,但是没有...所有实例de'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 :(得分:1)
只需将返回移到if块之外:
$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>