网站收取用户的回复短信,格式是:手机号1/日期1/流水号1/内容1/子码1 手机号2/日期2/流水号2/内容2/子码2  手机号3/日期3/流水号3/内容3/子码3 具体如:13698542355/2012-08-29 10:17:20/2451/短信内容1/00275 13568745621/2012-08-29 10:17:31/2452/短信内容2/00275如果想把这个字符串分解成一个数组,arr(array('mobile' => '13698542355','send_time'=>'2012-08-29 10:17:20','content' => '短信内容1'),array('mobile' => '13568745621','send_time'=>'22012-08-29 10:17:31','content' => '短信内容2'))怎么写比较好???请高手指教!

解决方案 »

  1.   

    $s='13698542355/2012-08-29 10:17:20/2451/短信内容1/00275 13568745621/2012-08-29 10:17:31/2452/短信内容2/00275';
    $t = preg_split('/\s+(?=\d{11})/', $s,-1, PREG_SPLIT_NO_EMPTY); $k=array('mobile','send_time','content');
    foreach($t as $v){
            $t=explode('/',$v);
    $arr[]=array_combine($k,array($t[0],$t[1],$t[3]));
    }
    print_r($arr);
      

  2.   

    $s = '13698542355/2012-08-29 10:17:20/2451/短信内容1/00275 13568745621/2012-08-29 10:17:31/2452/短信内容2/00275';
    $ar = array_chunk(explode('/', $s), 4);
    $k = array('mobile', 'send_time', 'content');for($i=1; $i<count($ar); $i++) {
      $t = explode(' ', $ar[$i][0]);
      $ar[$i-1][] = array_shift($t);
      $ar[$i][0] = current($t);
      $res[] = array_combine($k, array($ar[$i-1][0], $ar[$i-1][1], $ar[$i-1][3]));
    }
    print_r($res);
    Array
    (
        [0] => Array
            (
                [mobile] => 13698542355
                [send_time] => 2012-08-29 10:17:20
                [content] => 短信内容1
            )    [1] => Array
            (
                [mobile] => 13568745621
                [send_time] => 2012-08-29 10:17:31
                [content] => 短信内容2
            ))代码并不是越短越好的
      

  3.   

    $ros= '13698542355/2012-08-29 10:17:20/2451/短信内容1/00275 13568745621/2012-08-29 10:17:31/2452/短信内容2/00275';
    $num=ceil(strlen($ros)/53);
    $chars=array();
    for($j=0;$j<$num;$j++)
    {
          $chars[$j]=substr($ros,$j*53,53);
    }
    $rs=array();
    for($i=0;$i<count($chars);$i++)
    {
            $rs[$i]=preg_split('/\//', $chars[$i],-1,PREG_SPLIT_NO_EMPTY );
    }
    print_r($rs);
      

  4.   

    explode
    然后自己知道那个位置是那个就行。