昨夜渡轮 发表于 2011-4-4 01:27:56

用正则preg_match_all遇到的一个问题各位一定来看看

我是用的 CodeIgniter 写一个小偷主要是为了地址友好,其中用正则匹配所有相同内容时出现错误提示

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion

函数本身是这样的:

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

基中用到preg_match_all匹配的时候输出的数组只有转换成字符串也就是这样

//return implode(",", $arr);

才能用,不能直接读取循环数组这是为什么?
如果我直接在程序中写一个

preg_match_all('/<a href="(.*)" target=_blank>/isU',$list,$href);
print_r($href);

这个时候又是正常的,可是放到函数里就出错我搞不明白,大家知道的说一下原因啊,谢谢

昨夜渡轮 发表于 2011-4-4 01:45:54

我又测试了一下我觉得应该是函数的问题

return empty($arr) ? '' : trim($arr);
empty($arr) ? '' 这个可能是造成出错的原因这里该怎么改呢?

Hex 发表于 2011-4-4 09:13:10

你到底是什么问题?
trim 只能用在字符串上,你貌似传递了 array,自然出错了。

昨夜渡轮 发表于 2011-4-7 18:36:24

你到底是什么问题?
trim 只能用在字符串上,你貌似传递了 array,自然出错了。 ...
Hex 发表于 2011-4-4 09:13 http://codeigniter.org.cn/forums/images/common/back.gif

哦,这个地方可能是我没有搞清楚,如果数组用了trim是不是就会提示
"将数组转换为字符串"

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion

Hex 发表于 2011-4-7 18:41:08

对呀~
给数组用 trim,你想得到什么结果?自动把数组每个元素都做 trim?那还做不到,trim()没这么强大,需要自己 foreach

昨夜渡轮 发表于 2011-4-7 18:53:24

呵呵,谢谢HEX有时候一不小心还真容易犯错呵呵
页: [1]
查看完整版本: 用正则preg_match_all遇到的一个问题各位一定来看看