用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2950|回复: 5
收起左侧

[已解决] 用正则preg_match_all遇到的一个问题各位一定来看看

[复制链接]
发表于 2011-4-4 01:27:56 | 显示全部楼层 |阅读模式
我是用的 CodeIgniter 写一个小偷主要是为了地址友好,其中用正则匹配所有相同内容时出现错误提示

  1. A PHP Error was encountered
  2. Severity: Notice
  3. Message: Array to string conversion
复制代码

函数本身是这样的:
PHP复制代码
 
function Cutstr($sptag,$areaRule,$html,$regex=true,$model=true)
 {
  //用正则表达式的模式匹配多个相同项
  if($regex === true)
  {
   $areaRule = str_replace("/","[url=]\\/",$areaRule[/url]);
   $areaRules = explode($sptag,$areaRule);
   $arr = array();
   if($html==''||$areaRules[0]=='')
   {
    return '';
   }
   if($model===true)
   {
    preg_match_all("/".$areaRules[0]."(.*)".$areaRules[1]."/isU",$html,$arr);
   }else{
    preg_match("/".$areaRules[0]."(.*)".$areaRules[1]."/isU",$html,$arr);
   }
   return empty($arr[1]) ? '' : trim($arr[1]);
   //return implode(",", $arr[1]);
  }
  else //用字符串模式匹配
  {
   $areaRules = explode($sptag,$areaRule);
   if($html=='' || $areaRules[0]=='')
   {
    return '';
   }
   $posstart = @strpos($html,$areaRules[0]);
   if($posstart===false)
   {
    return '';
   }
   $posend = @strpos($html,$areaRules[1],$posstart);
   if($posend > $posstart && $posend!==false)
   {
    return substr($html,$posstart+strlen($areaRules[0]),$posend-$posstart-strlen($areaRules[0]));
   }
   else
   {
    return '';
   }
  }
 }
 
复制代码

基中用到preg_match_all匹配的时候输出的数组只有转换成字符串也就是这样
PHP复制代码
 
//return implode(",", $arr[1]);
 
复制代码

才能用,不能直接读取循环数组这是为什么?
如果我直接在程序中写一个
PHP复制代码
 
preg_match_all('/<a href="(.*)" target=_blank>/isU',$list,$href);
print_r($href[1]);
 
复制代码

这个时候又是正常的,可是放到函数里就出错我搞不明白,大家知道的说一下原因啊,谢谢
 楼主| 发表于 2011-4-4 01:45:54 | 显示全部楼层
我又测试了一下我觉得应该是函数的问题
PHP复制代码
 
return empty($arr[1]) ? '' : trim($arr[1]);
empty($arr[1]) ? '' 这个可能是造成出错的原因这里该怎么改呢?
 
复制代码
发表于 2011-4-4 09:13:10 | 显示全部楼层
你到底是什么问题?
trim 只能用在字符串上,你貌似传递了 array,自然出错了。
 楼主| 发表于 2011-4-7 18:36:24 | 显示全部楼层
你到底是什么问题?
trim 只能用在字符串上,你貌似传递了 array,自然出错了。 ...
Hex 发表于 2011-4-4 09:13


哦,这个地方可能是我没有搞清楚,如果数组用了trim是不是就会提示
"将数组转换为字符串"
PHP复制代码
 
A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
 
复制代码
发表于 2011-4-7 18:41:08 | 显示全部楼层
对呀~
给数组用 trim,你想得到什么结果?自动把数组每个元素都做 trim?那还做不到,trim()没这么强大,需要自己 foreach
 楼主| 发表于 2011-4-7 18:53:24 | 显示全部楼层
呵呵,谢谢HEX有时候一不小心还真容易犯错呵呵

本版积分规则