1 = 00000-00-12 = 00000-00-218 = 00000-01-8216 = 00000-21-610020 = 00010-21-6一个客户要求,相互转为。。晕。。新手不太知道咋搞。。谁有好主意·!!

解决方案 »

  1.   

    最后一个无法理解,10020如果没有换算法则无法转换10-21-6,如果是10216才符合我的判断
    $a='10216';
    echo sprintf("%05d-%02d-%d",substr($a, 0, -3),substr($a, -3, 2),substr($a, -1, 1) );替换$a就行,其他参数不用改
      

  2.   

    还要相互啊?
    反向很简单,用str_replace去掉“-”,然后转成整数型就行
      

  3.   


    /*
    *00001-11-6
    */
    echo str_func('1116');
    function str_func($v)
    {
    $res = '';
    if(strpos($v, '-') !== false)
    {
    $res = intval(str_replace('-', '', $v));
    }
    else
    {
    return preg_replace('#(.*?)([\d]{1,2})?([\d])$#e', "str_pad('\\1', 5, '0', STR_PAD_LEFT) . '-' . str_pad('\\2', 2, '0', STR_PAD_LEFT) . '-\\3'", $v);
    }
    return $res;
    }
      

  4.   


    诶?我这边正确啊,5个数字都试过,你那边输出什么?php版本?
      

  5.   

    sorry!打字打错了,这次copy过来,应该没错了$a='10216';
    echo sprintf("%05d-%02d-%d",substr($a, 0, -3),substr($a, -3, -1),substr($a, -1, 1));exit;
      

  6.   

    楼上 exit; 去掉,我是避免下面的代码测试混淆所以用这个语句来终止运行的
      

  7.   

    其实我自己也写了两个函数,用来相互转换,虽然不咋的。。function int_to_string($num)
    {
      $len = strlen($num);
      $len > 1 ? $a2 = substr($num, -2, 1): $a2 = '0';
      $len > 2 ? $a3 = substr($num, -3, 1): $a3 = '0';
      $len > 3 ? $a4 = substr($num, -4, 1): $a4 = '0';
      $len > 4 ? $a5 = substr($num, -5, 1): $a5 = '0';
      $len > 5 ? $a6 = substr($num, -6, 1): $a6 = '0';
      $len > 6 ? $a7 = substr($num, -7, 1): $a7 = '0';
      $len > 7 ? $a8 = substr($num, -8, 1): $a8 = '0';
      return sprintf("%s%s%s%s%s-%s%s-%s", $a8, $a7, $a6, $a5, $a4, $a3, $a2, substr($num, -1, 1));
    }function string_to_int($str)
    {
      if(!ereg("^[0-9]{5}-[0-9]{2}-[0-9]$", $str)){
        return -1;
      }
      $str = str_replace('-', '', $str);
      return strrev($str);
    }
      

  8.   

    用6楼的代码加个"strrev"函数倒序字符串,再加个正则验证输入参数完美。。哈哈··谢谢大家指教···
      

  9.   


    严谨点好哈哈。。不过没有你发的帖子我也不知道有这函数··【本人ASP转PHP,新手PHP一名】