分类 PHP 下的文章

bc是Binary Calculator的缩写。bc函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值。这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。

bcadd — 2个任意精度数字的加法计算
bccomp — 比较两个任意精度的数字
bcdiv — 2个任意精度的数字除法计算
bcmod — 对一个任意精度数字取模
bcmul — 2个任意精度数字乘法计算
bcpow — 任意精度数字的乘方
bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
bcscale — 设置所有bc数学函数的默认小数点保留位数
bcsqrt — 任意精度数字的二次方根
bcsub — 2个任意精度数字的减法

- 阅读剩余部分 -

什么是二进制安全?

C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含“0”(空字符),否则字符串中的“0”将被误认为是字符串结束符,这些限制使得C字符串只能保存文本数据,而不能保存像图片、音频、视频、压缩文件这样的二进制数据。而PHP的字符串则不同,其支持二进制数据的存储,PHP在处理带二进制字符的字符串时,程序不会对其中的数据做任何限制、过滤或者假设,数据在写入时是什么样的,它被读取时就是什么样,这种能力称为字符串的二进制安全。

PHP字符串与C字符串

- 阅读剩余部分 -

应用场景

商家划定了服务范围, 判断用户所在位置是否在商家的服务范围等场景。

思路:

  1. 假设点在三角形内, 则点将三角形分成3个小三角形;
  2. 点分成的三个小三角形的面积之和一定等于原来三角形的面积;
  3. 如果点不在三角形内, 点也可以与原来的三角形三个顶点组成三个三角形;
  4. 点与三个顶点组成的三个三角形面积之和一定大于原三角形面积;
  5. 上述问题改成求三角形面积的问题;
  6. 考虑到php的float计算不精确的问题,比较的时候可能会存在误差,这里应该用精确计算函数BC Math;
  7. 坐标仅支持两位小数。

CODE

- 阅读剩余部分 -

应用场景

从标题来看这时两个需求:

一个是固话和手机号的自动解析, 比如某输入框同时支持手机号、固话、手机号加固话三种联系方式的输入, 但是在后台我们需要将手机号和固话保存到不同的数据字段上,便于后期做数据分析。

另一个是固话和手机号的严格校验,这里说的严格校验其实并不严谨,只能说尽量严格,比如手机号11位并且1开头,还不能是11、12等,固话要带区号,每个区号下面的固话位数是7位或8位,还要支持分机号等。

解决方案

  1. 针对11位移动电话 (mobile);
  2. 针对带3位区号加8位座机号的固定电话(tel);
  3. 针对带4位区号加7或8位座机号的固定电话(tel);
  4. 针对以上2和3场景加1到4位的分机号(tel);
  5. 针对10位的400或800电话(corp);
  6. 针对以上固话的场景,不带区号并且提供了市级行政单位名的,自动补全区号。
  7. 针对以上所有场景,允许固话区号和座机号以及分机号之间通过空格或者横杠分开;允许手机号在满足344,335,353,443,434,533(甚至满足前3后3在一起之后中间可以任意拆分)的前提下使用空格或者横杠分开;允许400或800电话在满足 334,343,433的前提下使用空格或者横杠分开。

- 阅读剩余部分 -