解决方案 »

  1.   

    俺是php菜鸟,绝对菜的那种,请大家回帖时代码和步骤给的详细些!谢谢了
      

  2.   

    $mystr 是什么内容,你总要贴出原始数据是什么样吧。
      

  3.   

    [code=php]再详细点:
    $weblink="http://www.xxx.net.cn/news/getnews.asp?cid=4&topnum=10";
     $mystr=file_get_contents($weblink);
     $myarrnews=array();
    //拆分分条新闻条件成数组
    $myarrnews =explode("||**||", $mystr);
    //    print_r ($myarrnews);              //该分类ID下前10条数据的集合
     //拆分具体内容条件成数组    
     /*
        下面对采集的数据集合进行描述,就是说每条数据都包括以下的字段信息,而且这些信息已经获取到$myarrnews中了!
    0:代表采集信息数量
    1:信息原始ID号 (新闻分类ID号)
    2:信息标题
    3:信息类别
    4:信息内容
    5:是否首页图片
    6:访问量
    7:发布人
    8:副标题
    9:信息发布时间
     */
    $obj->ret=0;
     $newslist=array("newslist"=>array());
    for ($i=0;$i<count($myarrnews);$i++){            
               $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>。
    例如:
     if ($myarrline[$i]!="") {   
                  $newslist[$i]=>'title'=$myarrline[2];
                  $newslist[$i]=>commentcount=0;
                  $newslist[$i]=>source=$myarrline[7];
                  $newslist[$i]=>nid=$myarrline[1];
                  $newslist[$i]=>replycount=0;
                  $newslist[$i]=>ptime=$myarrline[9];                  
              }
    以下的格式不会写了(上面写的也不对)请大家帮忙补充
      

  4.   

    请给出真实的 url!
    不知道原始信息如何讨论?
      

  5.   

    抱歉,安全原因,不能给出原始地址!
    信息已经给的很详细了!不知道大侠还想要什么信息?
    生成的json串只要类似即可
      

  6.   

    那你至少也得给出一条数据(哪怕是虚构的)
    并指出与 json 成员的对应关系
      

  7.   

    其实大家如果阅读了#3楼的代码,看到这行:
      $newslist[$i]=>'title'=$myarrline[2];
    大致就能猜出需求的格式了,而且我只要大概的语法格式,不必一一对应各个字段的(其实,有些字段还需要在改造!)。既然大家想看详细点的信息,我就再解释下。
    //---------------------------------------------------------------------------------------------------
    $weblink="http://www.xxx.net.cn/news/getnews.asp?cid=4&topnum=5";
     $mystr=file_get_contents($weblink);
     $myarrnews=array();
    //拆分分条新闻条件成数组
    $myarrnews =explode("||**||", $mystr);
    //    print_r ($myarrnews);              //该分类ID下前5条数据的集合
     //拆分具体内容条件成数组 
    //以上代码可以得到从asp网页中分类cid=4的新闻(如学院新闻)共5条记录
    //--------------------------------------------------------------------------------------------------
    //接下来的代码中,变量$myarrline为其中的一条新闻记录,该条新闻记录又包括了10个字段,已经获取到值了。其中第2个字段是新闻id号(即nid),[1] => 2166 ,(参考0#楼代码)。其中第3个字段是新闻标题,例如:[2] => 创新工会工作 创建模范职工之家,等等,我就不一一解释了。这条新闻是获取到的5条新闻中的第一条。大家明白了吧!?
               $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 5 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>。
    //--------------------------------------------------------------------
    //最终需要转换重组成0#楼的json串,newslist是个数组,包含了5条记录,每条记录都要求显示出title等6个字段。(其实大家不必考虑每个字段对应哪个$myarrline[i]的值,看到3#楼代码 $newslist[$i]=>'title'=$myarrline[2];就全明白了!大家哪怕只写出一个title,我照猫画虎就搞定了!ok?)
    累死我了!
      

  8.   

     $newslist[$i] = array(
      'title' => $myarrline[2],
      'commentcount' => 0,
      'source' => $myarrline[7],
      'nid' => $myarrline[1],
      'replycount' => 0,
      'ptime' => $myarrline[9],
    );
    帮人还帮出毛病来了                  
      

  9.   

    首先感谢xuzuning斑竹的回复,不过我真的很菜,只给我这点代码我是搞不定的,我需要的是0#楼json串的完整代码,其中newlist数组中的5条记录用循环实现。
    再次感谢!
      

  10.   

    $ar = arrat(
      ' ret' => 0, 
      'data' => array(
         'newslist' => $newslist,
      ),
    );
    echo json_encode($ar);$newslist 的产生 #8 已经示例了,你自己依葫芦画瓢吧
      

  11.   

    其实我本意是想这样:
    //----------------------------------------
         $obj->ret=0;
             $newlist=array();
             $data=array("newslist"=>$newlist,"totalnum"=>5);    
             for ($i=0;$i<count($myarrnews);$i++){            
               echo "-----------------";
               $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
               if ($myarrnews[$i]!="") {
                  //echo "No$i"; 
                  $newsobj=new News();
                  $newsobj->setTitle($myarrline[2]);
                 // echo "========>".$newsobj->getTitle();
                  $newsobj->setCommentcount(0);
                  $newsobj->setSource($myarrline[7]);
                  $newsobj->setNid($myarrline[1]);
                  $newsobj->setReplycount(0);
                  $newsobj->setPtime($myarrline[9]);             
                 
                  $newslist[$i]=>$newsobj;  //这里赋值有问题
             }
                else
               {
     echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!";
                  return;
      }             
              }
             $obj->data=$data; 
                                                                                                                                 /* echo "总量:".$myarrline[0]."<br />";
     echo "原始ID:".$myarrline[1]."<br />";
     echo "标题:".$myarrline[2]."<br />";
     echo "类别:".$myarrline[3]."<br />";
     //$bodyneirong=preg_replace('<\s*img([^>]*?)>','',myarrline[4]); 
                                                                                                                                     echo "内容:".$myarrline[4]."<br />";
     echo "图片:".$myarrline[5]."<br />";
     echo "访问量:".$myarrline[6]."<br />";
     echo "发布人:".$myarrline[7]."<br />";
     echo "副标题:".$myarrline[8]."<br />";
     echo "发布时间:".$myarrline[9]."<br />";
     echo "<hr />";
     */ 
      $obj->msg ="ok";  
      print_r(json_encode($obj));
      $newslist=NULL;
      $obj=NULL; 
              ?>
    //-----------------------------------
      $newslist[$i]=>$newsobj;  //但是这里赋值有问题!!
    另外,虽然我总共只学了2个小时的php,我也知道
    $obj->ret=0;

    $obj = array(
    是有区别的!
      

  12.   

    $data = array("newslist"=>$newlist,"totalnum"=>5);
    显然应该放到for循环的后面赋值而不是前面。
      

  13.   

    不行啊,还是那一行提示有问题,移动代码也不行:
     $obj->ret=0;
             $newslist=array();
             $data=array("newslist"=>$newslist,"totalnum"=>5);      
             for ($i=0;$i<count($myarrnews);$i++){            
               echo "-----------------";
       $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
     if ($myarrnews[$i]!="") {
                  echo "No$i"; 
                  $newsobj=new News();
                  $newsobj->setTitle($myarrline[2]);
                  echo "========>".$newsobj->getTitle();   //此处可以取到title值
                  $newsobj->setCommentcount(0);
                  $newsobj->setSource($myarrline[7]);
                  $newsobj->setNid($myarrline[1]);
                  $newsobj->setReplycount(0);
                  $newsobj->setPtime($myarrline[9]);             
                 
                  $newslist[$i]=>$newsobj;  //这里赋值有问题 ,提示Parse error: parse error in                
                }
                else
      {
        echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!";
                  return;
      }             
              }         $obj->data=$data; 
    /* echo "总量:".$myarrline[0]."<br />";
     echo "原始ID:".$myarrline[1]."<br />";
     echo "标题:".$myarrline[2]."<br />";
     echo "类别:".$myarrline[3]."<br />";
     //$bodyneirong=preg_replace('<\s*img([^>]*?)>','',myarrline[4]); 
                 echo "内容:".$myarrline[4]."<br />";
     echo "图片:".$myarrline[5]."<br />";
     echo "访问量:".$myarrline[6]."<br />";
     echo "发布人:".$myarrline[7]."<br />";
     echo "副标题:".$myarrline[8]."<br />";
     echo "发布时间:".$myarrline[9]."<br />";
     echo "<hr />";
     */ 
      $obj->msg ="ok";  
      print_r(json_encode($obj));
      

  14.   

      for ($i=0;$i<count($myarrnews);$i++){            
               echo "-----------------";
       $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
     if ($myarrnews[$i]!="") {
        
                 $newslistarr=array('title' => $myarrline[2],   'commentcount' => 0,   'source' => $myarrline[7],   'nid' => $myarrline[1],   'replycount' => 0,   'ptime' => $myarrline[9], );                
                           $newslist[$i]=$newslistarr;
                           }
    //--------------------------------------------
    这样也不行,格式化后结果:{"ret":0,"data":{"newslist":[],"totalnum":5},"msg":"ok"} 数组是空的。
    无奈了,php语法究竟怎么写呢?
      

  15.   

    $newslist[$i]   = $newsobj
    你的多了个>
      

  16.   

    是的,我这里写错了,不过改正之后,还是不行
    格式化后结果:{"ret":0,"data":{"newslist":[],"totalnum":5},"msg":"ok"} 数组是空的。
      

  17.   

    我已经放弃使用对象了,php里对象转数组效率太低!
      

  18.   

    终于整出来了!是php二维数组的语法格式不会啊,绕了很多弯路。十分感谢ohmygirl的帮忙!
    把代码贴出来,供大家参考下:
    //---------------------------------------------------------------
    <?php
    //数据库信息编码的设置
    header("Content-type: text/html; charset=utf-8");
    ?>
     <?php
    /**************************************************************
     *
     * 使用特定function对数组中所有元素做处理
     * @param string &$array 要处理的字符串
     * @param string $function 要执行的函数
     * @return boolean $apply_to_keys_also 是否也应用到key上
     * @access public
     *
     *************************************************************/
    function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
    {
        static $recursive_counter = 0;
        if (++$recursive_counter > 1000) {
            die('possible deep recursion attack');
        }
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                arrayRecursive($array[$key], $function, $apply_to_keys_also);
            } else {
                $array[$key] = $function($value);
            }
     
            if ($apply_to_keys_also && is_string($key)) {
                $new_key = $function($key);
                if ($new_key != $key) {
                    $array[$new_key] = $array[$key];
                    unset($array[$key]);
                }
            }
        }
        $recursive_counter--;
    }
     
    /**************************************************************
     *
     * 将数组转换为JSON字符串(兼容中文)
     * @param array $array 要转换的数组
     * @return string 转换得到的json字符串
     * @access public
     *
     *************************************************************/
    function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
    }
    ?>
    <html>
      <head>
        <title>校园移动APP
        </title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      </head>
      <body  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
        <table  width="890"  border="0" cellpadding="4" cellspacing="3" align="left" style="font-size:13px">
          <tr><td>
              <hr>导航---【采集结果】2:
              <br>
              <br>
              <br>
              <br>
    <?php
    //信息采集地址,参数是默认采集当前年份下10条信息 系统限制到最大50条信息

     $weblink="http://newinfor.lnmec.net.cn/news/getnews.asp?lx=74&topnum=5";
    // echo $weblink;
     $mystr=file_get_contents($weblink);//每次10条!
     $myarrnews=array();
     //拆分分条新闻条件成数组
     $myarrnews =explode("||**||", $mystr);
    //    print_r ($myarrnews);              //该分类ID下前10条数据的集合
     //拆分具体内容条件成数组    
     /*
        下面对采集的数据集合进行描述
    0:代表采集信息数量
    1:信息原始ID号 (新闻分类ID号)
    2:信息标题
    3:信息类别
    4:信息内容
    5:是否首页图片
    6:访问量
    7:发布人
    8:副标题
    9:信息发布时间
     */
             $obj=array();
     $obj["ret"]=0;          
             $newslist=array();    
             for ($i=0;$i<count($myarrnews);$i++){            
               echo "-----------------";
       $myarrline=array();  
               $myarrline =explode("||%%||", $myarrnews[$i]);      
               print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
     if ($myarrnews[$i]!="") {
                 echo "No$i"; 
     
                 $newslist[$i]['title']=$myarrline[2] ;  
                 $newslist[$i]['commentcount']=0 ; 
                 $newslist[$i]['source']=$myarrline[7] ; 
                 $newslist[$i]['nid']=$myarrline[1] ; 
                 $newslist[$i]['replycount']=0; 
                 $newslist[$i]['ptime']=$myarrline[9] ; 
     
                }
                else
      {
        echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!";
        }             
              }
              $data=array("newslist"=>$newslist,"totalnum"=>5); 
              $obj["data"]=$data; 
      $obj["msg"] ="ok";  
      print_r(JSON($obj));           
      $newslist=NULL;
      $obj=NULL; 
              ?>
              </td>
          </tr>
        </table>
      </body>
    </html>