一个IP的文件,每行的格式如下:
   0.0.0.1       0.0.0.6     xxx网络 xxxx地方
    要存到数据库中,首先想到的是把所有的空格都化成一个空格,再用空格分割。可是后来发现有的记录最后一个XXXX地方里面也有一个空格。不知道怎么办了。我是新手,大家帮帮忙啊, 不胜感激。

解决方案 »

  1.   

    那你先把“0.0.0.1 0.0.0.6 xxx网络 xxxx地方”这串东西,去除右边空格,再做你的操作。rtrim
      

  2.   

    //适用于xxxx地方部分中间有一个空格的情况
    $str = '0.0.0.1   0.0.0.6   xxx网络          xxxx 地方';
    $str[strripos($str,' ')] = '';$str = preg_replace('/[ ]{2,}/',' ',$str);
    $ar = explode(' ',$str);
    print_r($ar);
      

  3.   

    我觉得中间分割的多数不是空格而是\t,检查一下你的文件
    如果是\t的话,按csv导入数据库更好
      

  4.   

    谢谢各位。
    andyxl,可是空格是在中间啊。
    snmr_com 试了一下 好像不是\t啊,呵呵。
    还有长两个角的大哥,用了你的方法,可是又有一个问题,有的记录 “xxxx地方”并没有空格,而且“xxx网络”和“xxxx地方”之间只有一个空格,就出问题了。
      

  5.   

    比较棘手啊,我只能想到下面一个笨办法了。
    $str = '0.0.0.1   0.0.0.6   xxx网络 xxxx地方';
    $str = preg_replace('/[ ]{2,}/',' ',$str);
    $ar = explode(' ',$str);
    if (count($ar) > 4) $str[strripos($str,' ')] = '';
    $ar = explode(' ', $str);
    print_r($ar);
      

  6.   

    试试这个$a="0.0.0.1 0.0.0.6 xxx网络 xxxx地方  ";
    //把左右兩側的空格和\t過濾掉
    $a=Trim($a," ");
    //把內部所有的空格和\t替換成|
    $a=Strtr($a,Array(" "=>"|"," "=>"|"));
    //把連續的雙||替換成一個
    $a=Strtr($a,Array("||"=>"|");//用|拆分
    $b=Explode("|",$a);Echo $b[0],'<br>';
    Echo $b[1],'<br>';
    Echo $b[2],'<br>';
    Echo $b[3],'<br>';
      

  7.   

    function foo($v) {
      $t = split("[ \t]+", trim($c));
      return "('". join("','", $t) ."')";
    }$ar = array_map('foo', file('你的数据文件名'));$sql = 'insert into ip_table (sip, eip, net, addr) values ' . join(',', $ar);
      

  8.   

    貌似纯真IP导出的数据
    如果第三列没有空格$str='4.19.79.0       4.19.79.63      美国 Armed Forces Radio/Television';
    preg_match_all("/^([\d\.]+) +([\d\.]+) +([^ ]+) +(.+)$/",$str,$match);
    var_dump($match);