Ints.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * 针对 int 数据做的特殊操作
  5. * @author gwang
  6. */
  7. class Ints {
  8. /**
  9. * int 骚操作, 提取第几位到第几位的值(左数)
  10. * @param int $i Int值
  11. * @param int $start 左边数第几位, 第一位是0
  12. * @param int $len 截取长度
  13. * @param bool $throwException 是否抛出异常,默认false
  14. * @return string
  15. * @throws ArgumentOutOfRangeException
  16. */
  17. public static function Slice(int $i, int $start, int $len, bool $throwException = false): int {
  18. $i_len = strlen("$i");
  19. if ($throwException) {
  20. if ($start < 0 || $start > 18) {
  21. throw new \Exception("start is out of range!");
  22. }
  23. if ($len <= 0 || $start + $len > $i_len) {
  24. throw new \Exception("end is out of range!");
  25. }
  26. }
  27. $start = $start < 0 ? 0 : $start;
  28. $start = $start > $i_len ? $i_len : $start;
  29. $len = $len < 0 ? 0 : $len;
  30. $len = ($start + $len) > $i_len ? $i_len - $start : $len;
  31. $r = (int) Pow(10, $i_len - $start - $len);
  32. $l = (int) Pow(10, $i_len - $start);
  33. $ret = $i - intval($i / $l) * $l; // 去除左边
  34. $ret /= $r; // 去除右边
  35. return (int) $ret;
  36. }
  37. }