Ints.php 1.3 KB

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