function getcsrq($code){ 
preg_match_all('/<td> 出生日期:<\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
<td> 居 住 地: <\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
<td> 工作年限:<\/td>(.*?)<td align="left">(.*?) <\/td>/is',$code,$csrq_tmp);
$csrq1=$csrq_tmp[2];  //这种写法有问题么?我用print_r($csrq_tmp['2']);是可以的,为什么调用会有问题
$csrq2=$csrq_tmp[5];
$csrq3=$csrq_tmp[8]; 
return $csrq1;
return $csrq2;
return $csrq3; 
}function printcsrq($csrq1,$csrq2,$csrq3){ 
echo " <strong>出生日期:</strong>",strip_tags($csrq1)," <br/>"; 
echo " <strong>居 住 地:</strong>",strip_tags($csrq2)," <br/>";
echo " <strong>工作年限:</strong>",strip_tags($csrq3)," <br/>";
}$csrq = getcsrq($htmlcodes);  //掉用方法
printcsrq($csrq1,$csrq2,$csrq3);  //打印出来的值是空的????????
谁能帮我看看,哪的问题出错了~~~~~

解决方案 »

  1.   

    作用域的问题
    这样
    function getcsrq($code){ 
    preg_match_all('/<td> 出生日期:<\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
    <td> 居 住 地: <\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
    <td> 工作年限:<\/td>(.*?)<td align="left">(.*?) <\/td>/is',$code,$csrq_tmp);
    global $csrq1, $csrq2, $csrq3; // 声明全局变量
    $csrq1=$csrq_tmp[2];  //这种写法有问题么?我用print_r($csrq_tmp['2']);是可以的,为什么调用会有问题
    $csrq2=$csrq_tmp[5];
    $csrq3=$csrq_tmp[8];  
    }
      

  2.   

    不行,加了作用域打印出来的是:
    出生日期:Array 
    居 住 地:Array 
    工作年限:Array 
      

  3.   


    啊,晕,看错了。
    你最后的返回什么意思啊,函数没有这么返回的。(只能返回一个)你直接返回一个$csrq_tmp然后后面调用
    printcsrq($csrq[2],$csrq[5],$csrq[8])
      

  4.   

    <td align="left">(.*?)<\/td>
    那3个都是这种格式,要怎么写才能分别读出,我用$csrq1=$csrq_tmp[0][2]和$csrq1=$csrq_tmp[2]又有什么不一样,我对正则不是太熟悉
      

  5.   

    preg_match_all返回的结果楼主是否了解?
    如果反回的数组是 $matches 那么
    $matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等...//这种写法有问题么?我用print_r($csrq_tmp['2']);是可以的,为什么调用会有问题
    要看你这里print_r($csrq_tmp['2']) 肯定是数组, 打印出来然后根据格式取出你要的值就行
      

  6.   

    function getcsrq($code){ 
    preg_match_all('/<td> 出生日期:<\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
    <td> 居 住 地: <\/td>(.*?)<td align="left">(.*?)<\/td>(.*?)
    <td> 工作年限:<\/td>(.*?)<td align="left">(.*?) <\/td>/is',$code,$csrq_tmp);
    return $csrq_tmp;
    }function printcsrq($csrq1,$csrq2,$csrq3){ 
    echo " <strong>出生日期:</strong>",strip_tags($csrq1)," <br/>"; 
    echo " <strong>居 住 地:</strong>",strip_tags($csrq2)," <br/>";
    echo " <strong>工作年限:</strong>",strip_tags($csrq3)," <br/>";
    }$csrq = getcsrq($htmlcodes);  //掉用方法
    printcsrq($csrq[2],$csrq[5],$csrq[8]);  //打印出来的值是空的????????
    ---------------------否则的话,如果你想返回多个值,不能通过 return语句。
    需要在参数里添加传址参数
    function getcsrq($code,&$csrq1,&$csrq2,&$csrq3,){ 
    ...
    $csrq1=$csrq_tmp[2]; 
    $csrq2=$csrq_tmp[5];
    $csrq3=$csrq_tmp[8]; 
    }
    这样就行了
      

  7.   


    function getcsrq($code){
    preg_match_all('/ <td> 出生日期: <\/td>(.*?) <td align="left">(.*?) <\/td>(.*?) 
    <td> 居 住 地: <\/td>(.*?) <td align="left">(.*?) <\/td>(.*?) 
    <td> 工作年限: <\/td>(.*?) <td align="left">(.*?) <\/td>/is',$code,$csrq_tmp); 
    $csrq[]=$csrq_tmp[2]; 
    $csrq[]=$csrq_tmp[5]; 
    $csrq[]=$csrq_tmp[8]; 
    return $csrq; //都放到数组中,输出时都是$csrq[0]这种对么???

    function printcsrq($csrq){ 
    echo " <strong>出生日期:</strong>",strip_tags($csrq[0])," <br/>"; 
    echo " <strong>居 住 地:</strong>",strip_tags($csrq[1])," <br/>";
    echo " <strong>工作年限:</strong>",strip_tags($csrq[2])," <br/>";
    }
    我用这运行的时候,发现速度出其的慢,甚至都超时了~~~
      

  8.   


    如果慢,应该不是最后那几句赋值和返回语句造成的。
    你最好一步一步调试,先不要调用printcsrq($csrq)
    在第一个函数里用print_r($csrq_tmp)输出结果看看;然后再函数外面print_r($csrq)看看。速度怎么样?
      

  9.   

    把htmlcode也发出来。。让我也调试下啊。。
      

  10.   

    你的正则式不正确吧,我试了试print_r($csrq_tmp);里面得不到和你正则式匹配的字符串