将值放入数组尾部

array_push()函数:向数组尾部插入值。
实用不使用这个函数,直接使用$arr[]=$value代替

  1. <?php
  2. $urls = [];
  3. for ($i=1; $i < 10; $i++) {
  4. // array_push($urls,$i);
  5. $urls[]=$i;
  6. }

extract() 函数从数组中将变量导入到当前的符号表

<?php
$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
//结果 
$a = Cat; $b = Dog; $c = Horse


在使用extract之后可以直接使用变量,并且变量的名字是字段名字,变量的值是字段的值,可以很方便的提取$_POST或者$_GET的元素,也就是可以在模版页面页面直接使用echo $id;echo $name

compact() 函数创建一个包含变量名和它们的值的数组。

适合laravelr 中return view中参数的写法:

<?php
$firstname = "Peter";
$lastname = "Griffin";
$age = "41";
$result = compact("firstname", "lastname", "age");
print_r($result);
//结果 
Array
(
    [firstname] => Peter
    [lastname] => Griffin
    [age] => 41
)

PHP中将字符串转化为整数(int) intval() printf() 性能测试

intval() 函数用于获取变量的整数值。

intval();函数 使用(int)$a 速度最快,三个功能一样
$catid = $_GET[‘catid’] = intval($_GET[‘catid’]);

eval() — 把字符串作为PHP代码执行 是一个语言构造器而不是一个函数,不能被 可变函数 调用。

例子:

<?php
$data_xingji[0]['setting']是我从数据库中查找出的setting字段的内容,是这样一组数组
array (
  'options' => '经济型|1
二星级/其他|2
三星级/舒适|3
四星级/高档|4
五星级/豪华|5',
  'boxtype' => 'select',
)
eval("\$setting_xingji =".$data_xingji[0]['setting'].";");
$setting_xingji是自己定义的变量,此时的$setting_xingji就将上面的字符串转化,可以作为php代码使用,

array_merge — 合并一个或多个数组

用处:

<?php
//将随机生成的数字字母合成一个大的数组。
$arr=array_merge(range(0,9),range(a,z),range(A,Z));
// — 将数组打乱
shuffle($arr); 
//array_slice — 从数组中取出一段 ,取出四位
//,join()的别名 implode — 将一个一维数组的值转化为字符串 ,就是将数组的值,输出成字符串的形式。就是只输出结果
$str=join('',array_slice($arr,0,4));


str_replace — 子字符串替换 (查找的目标值,查找的目标值,执行替换的数组或者字符串)

str_replace("qrscene_","",“qrscene_123123”))
//将qrscene_123123的前缀qrscene_替换为空,为123123

sprintf占位符方式替换站位的东西

格式化字符串
printf() 函数把格式化的字符串写入变量并输出。
vprintf() 中的参数位于数组中

$str = "北京";
$number = 9;
printf("在%s有 %u 百万辆自行车。",$str,$number);//在北京有 9 百万辆自行车。


sprintf () 函数把格式化的字符串写入变量中,但不输出。
vsprintf() 中的参数位于数组中,

$str = "北京";
$number = 9;
$a = sprintf("在%s有 %u 百万辆自行车。",$str,$number);//不会直接输出,需要打印出来
echo $a;//在北京有 9 百万辆自行车。

例如:

 $str = '99.9';
    $result = sprintf('%01.2f', $str);
    echo $result;//结果显示99.90
这个 %01.2f 是什么意思呢?<br />    1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 "起始字符", 直到出现 "转换字符" f为止,就算格式终止。<br />    2、跟在 % 符号后面的是 0, 是 "填空字元" ,表示如果位置空着就用0来填满。<br />    3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。<br />        如果把 1 改成 6,则 $result的值将为 099.90<br />        因为,在小数点后面必须是两位,99.90 一共5个占位,现在需要6个占位,所以用0来填满。<br />    4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23.<br />        为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。<br />    5、f 表示转换成浮点数,最后 以  "转换字符" 结尾。常见的转换字符有:<br />l  %s - 字符串<br />l  %f - 浮点数(本地设置)<br />l  %u - 不包含正负号的十进制数(大于等于 0)<br />%u详细解释:<br />当我们需要将负数整型,转换成无符号整型的时候,可以使用sprintf()函数的%u参数,这个参数的意思是:%u不包含正负号的十进制数(大于等于0),实际意思是会将负数表示的整型,转换成正数表示的整型,用float类型表示超出整型的范围。<br />其实就是用4294967296-负数整型,(32位系统下)
$number = -10;
$txt = sprintf("%u", $number);
echo $txt;//4294967286

替换短信内容

方式1:使用str_replace
这种方式是以占位数字表示具体的内容,比如0就是名字,1就是产品名称,
所以,在不改变代码的前提下,用户可以调换短信内容的顺序,可以删除其中的某一个,但是不能改占位数字

<?php
$smsContent = '尊敬的{0},您成功购买{1},消费{2}元,时间是{3}';
$replaceArr = array($fullName,$productName,$total,$time);//需要替换的真实数据,组成数组
foreach ($replaceArr as $key => $value) {
    $placeholder = '{'.$key.'}';
    // 用$value替换{0},第一个$smsContent 为每一次替换之后的结果,括号里的$smsContent 为上一次的结果
    $smsContent = str_replace($placeholder, $value, $smsContent );
}


方法2:使用sprintf
快,简单,从左到右的顺序已经固定,不能多,不能少不能换顺序,

$smsContent = '尊敬的%s ,您成功购买%s,消费%u元,时间是%s';
$replaceArr = array($fullName,$productName,$total,$time);//需要替换的真实数据,组成数组
$sendMessage = vsprintf("$smsContent",$replaceArr);

推荐使用第二个方式,方便,快。而且短信内容一单备案之后,内容中的参数顺序是不轻易改变的。
虽然第一个方式可以更换短信的内容顺序,但是短信内容一般不会只是更换顺序,还需要增加参数内容,这就需要更改代码中的参数了。

php 换行符,根据服务器自动转换 \r \n

PHP_EOL

浮点数进行运算出现的问题

floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数
方法一:将浮点数都扩大倍数变成整数,然后进行运算

<?
$a = (0.1+0.7);//0.8
$b = 0.8;
// 2,不相等
if($a == $b){
    echo 1;
}else{
    echo 2;
}
echo '<br />';

$aa = (0.1+0.7)*10;//8
$bb = 8;
// 2,不相等
if($aa == $bb){
    echo 1;
}else{
    echo 2;
}
echo '<br />';

// 把浮点数扩大十倍,最后再除以10
$aaa = (0.1*10+0.7*10)*10/10;//8
$bbb = 8;
// 1,相等
if($aaa == $bbb){
    echo 1;
}else{
    echo 2;
}


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

$a = bcadd(0.1, 0.7,1);//0.8;表示浮点数0.1和0.8相加,保留一位小数位
$b = 0.8;

// 1,相等
if($a == $b){
    echo 1;
}else{
    echo 2;
}

去零,字符串数字去零

<?
$a = '90.010';//字符串类型的数字
$b = 90.010;//浮点型的数字。

echo '<pre>';
    print_r($a);//90.010,字符串类型的数字会保留最后面的0

echo '<pre>';
    print_r($b);//90.01,数字类型的,浮点型的数字会自动去掉后面的0

// 转化成整型(会去掉小数部分),使用 (int) 或 (integer) 强制转换,或者通过函数 intval() 来将一个值转换成整型。
echo '<pre>';
    print_r((int)$a);//90.会将小数部分都去掉

echo '<pre>';
    print_r((int)$b);//90,.会将小数部分都去掉

// 去掉小数点后面的0方法总结:

// 数字类型的,浮点型的数字会自动去掉后面的0
echo '<br>';
print_r($b);//90.01,

// rtrim去掉0, 不推荐使用
echo rtrim(rtrim($a, '0'), '.');//90.01,如果是90.00的情况,里面的rtrim去掉00,为90.  外面的rtrim,去点.变成90。
echo '<br>';
// 但是使用rtrim去除0的时候有一个很大的问题,如果是字符串类型的900,没有小数部分了。此时会变成:9
echo rtrim(rtrim('900', '0'), '.');//9


//既然rtrim会去掉正数部分的0,所以可以通过.分割字符串,如果有小数的话,使用rtrim去掉小数部分的点:
$a = '90000.01';
$arr =  explode('.', $a);
if(!isset($arr[1])){ //没小数直接返回;
    echo $a;
    die;
}
//有小数就去掉小数的0,如果最右边还有点的话,也去掉;
echo rtrim(rtrim($a, '0'), '.');



// 字符串数字进行运算,如果两个字符串数字进行运行会自动变成浮点型,如果是一个字符串数字要去掉0,需要多加0进行运算。
echo '<pre>';
    print_r($a+0);//90.01


// 推荐使用,将字符串数字转换为浮点型
echo '<pre>';
    print_r((float)$a);//90.01

PHP保留两位小数的几种方法

<?
 $num = 1000.4;

    //第一种:利用round()对浮点数进行四舍五入
    echo round($num,2);  //1000.4
    echo '<br>';
    //第二种:利用sprintf格式化字符串
    $format_num = sprintf("%.2f",$num);
    echo $format_num;  //1000.40
    echo '<br>';
    //第三种:利用千位分组来格式化数字的函数number_format()
    echo number_format($num, 2);  //1,000.40
    echo '<br>';
    //或者如下
    echo number_format($num, 2, '.', '');  //1000.40

PHP数字补零的两种方法

str_pad
str_pad
顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串
例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置)
其中填补后的长度必须是个正整数,填补位置有三个选项,
左边:STR_PAD_LEFT,
右边:STR_PAD_RIGHT,
两端:STR_PAD_BOTH
例如:

1 echo str_pad(1,8,”0”,STR_PAD_LEFT);

结果:00000001

1 echo str_pad(1,8,”0”,STR_PAD_RIGHT);

结果:10000000

1 echo str_pad(1,8,”0”,STR_PAD_BOTH);

结果:00010000
在上边的例子中值得注意的一个细节是,如果填补的位数是个奇数,例如例三中填补了7个0,右边优先。
再看补零的另外一种方法sprintf
这个函数学过c的都十分了解它,在左边补零(或者在小数点后补零)用起来还是很方便的
先看左边补零

1 echo sprintf(“%05d”,1);

先说%05d的意思,用一个5位数的数字格式化后边的参数,如果不足5位就补零
运行结果是00005
再看小数点后补零

1 echo sprintf(“%01.3f”,1);

%01.3f的意思是说,用一个小数点后最少三位不足三位补零,小数点前最少一位,不足一位补零的浮点数格式化后边的参数
其运行结果是:1.000

number_format() 函数通过千位分组来格式化数字。

echo number_format('1234.56');
echo number_format('1234.56',1);
echo number_format('1234.56',2);
echo number_format('1234.56',3);
echo number_format('1234.56',2,'-','/');


结果如下

1,235 // 四舍五入
1,234.6 //
1,234.56 //
1,234.560 // 小数位不足,补充0
1/234-56 // 千分位符号变成/,小数点符号变为-

ini_set:为一个配置选项设置值

ini_set(‘display_errors’,’On’);

stripslashes删除反斜杠

stripslashes($value)

array_map将数组中的每一项都拿出来执行一次stripSlashesDeep函数,

public function stripSlashesDeep(){  }
array_map('stripSlashesDeep', $value);

http_build_query

生成 url-encoded 之后的请求字符串描述string http_build_query ( array formdata [, string numeric_prefix] )

<?
$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');
echo http_build_query($data);
foo=bar&baz=boom&cow=milk&php=hypertext+processor

filter_var

是PHP内置的一个变量过滤的方法, 提供了很多实用的过滤器, 可以用来校验整数、浮点数、邮箱、URL、MAC地址等