PHP

作者: wangxl999 | 来源:发表于2018-09-20 16:45 被阅读0次

    数组操作

    array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。

    array_walk_recursive() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。该函数与 array_walk() 函数的不同在于可以操作更深的数组(一个数组中包含另一个数组)。

    instanceof用于确定一个 PHP 变量是否属于某一类class的实例

    instanceof也可用于确定一个变量是不是实现了某个接口的对象的实例

    array_shift()删除数组头部元素,并返回,数组为空或不存在返回null

    new StringValidator($this->shell->_unsafeVar[$key] ?? null, $this->shell)

    str_pad() 函数把字符串填充为新的长度。

    # urlencode处理成“+”,rawurlencode处理成“%20”

    urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。

    rawurlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

    $a1=str_replace(array('b','a'),'c','abc');

    str_replace(array('b','a'),array('c','d'),'abc');

    array_search('v',array('ad','cd','c'=>'v'));//返回c或者false

    array_key_exists('c',array('ad','cd','c'=>'v'));//返回bool

    $d = array('a'=> 'c','cd' =>'ls');

    list($k,$v) =each($d);

    var_dump($k);//a

    var_dump($v);//c

    $d = array('a'=> 'c','cd' =>'ls');

    $ds = array_slice($d,0,2);

    var_dump($ds);//array('a'=>'c','cd'=>'ls')

    $d = array('a'=> 'c','cd' =>'ls');

    $ds = array_splice($d,0,1);

    //可以将数组中的一段取出,与上个函数不同在于返回的序列从原数组中删除

    var_dump($ds);//array('a'=> 'c')

    var_dump($d);//array('cd'=> 'ls')

    `

    $d = array('a'=> 'c','cd' =>'ls','cc'=>'ds','mm'=> 'ss');

    $ds = array_chunk($d,2,true);

    var_dump($ds);

    array(2) {

      [0]=>

      array(2) {

        ["a"]=>

        string(1) "c"

        ["cd"]=>

        string(2) "ls"

      }

      [1]=>

      array(2) {

        ["cc"]=>

        string(2) "ds"

        ["mm"]=>

        string(2) "ss"

      }

    }

    $d=array('a'=> 'c','cd' =>'ls','cc'=>'ds','mm'=> 'ss');

    $ds = array_pad($d,6,'u');

    var_dump($ds);

    array(6) {

      ["a"]=>

      string(1) "c"

      ["cd"]=>

      string(2) "ls"

      ["cc"]=>

      string(2) "ds"

      ["mm"]=>

      string(2) "ss"

      [0]=>

      string(1) "u"

      [1]=>

      string(1) "u"

    }

    `

    数组与栈

    array_push($arr,”apple”,”pear”);将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数

    array_pop($arr);将数组栈的最后一个元素弹出(出栈)

    数组与队列

    array_shift($arr);数组中的第一个元素移出并作为结果返回(数组长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变)

    array_unshift($arr,”a”,array(1,2));在数组的开头插入一个或多个元素

    回调函数

    array_filter($arr,”function”);使用回调函数过滤数组中的每个元素,如果回调函数为TRUE,数组的当前元素会被包含在返回的结果数组中,数组的键名保留不变

    `

    $d=array('a'=> 'c','v'=>'t');

    array_walk($d,'test',3);

    functiontest(&$item,$v,$a){

        $item=$item.$a;

    }

    var_dump($d);

    array(2) {

      ["a"]=>

      string(2) "c3"

      ["v"]=>

      string(2) "t3"

    }

    `

    $d=array(1,2,3,4);

    $ds = array_map('test',$d);

    functiontest($n){

        return($n*$n);

    }

    var_dump($ds);

    array(4) {

      [0]=>

      int(1)

      [1]=>

      int(4)

      [2]=>

      int(9)

      [3]=>

      int(16)

    }

    functionmap_Spanish($n, $m)

    {

        return(array($n => $m));

    }

    $a=array(1, 2, 3, 4, 5);

    $b=array("uno", "dos", "tres", "cuatro", "cinco");

    $c = array_map("map_Spanish", $a, $b);

    array(array(1=>"uno"),array(2=>"dos"),...);

    array_reduce — 用回调函数迭代地将数组简化为单一的值

    functionsum($carry, $item)

    {

        $carry += $item;

        return$carry;

    }

    functionproduct($carry, $item)

    {

        $carry *= $item;

        return$carry;

    }

    $a=array(1, 2, 3, 4, 5);

    var_dump(array_reduce($a, "sum")); // int(15)

    var_dump(array_reduce($a, "product", 10)); // int(1200), because: 10*1*2*3*4*5

    array_sum($arr);对数组内部的所有元素做求和运算

    array_protuct($arr);计算数组中所有值的乘积

    29:数组的合并

    array_merge($arr1,$arr2);合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面,下标重置)

    “+”$arr1+$arr2;对于相同的键名只保留后一个

    array_merge_recursive($arr1,$arr2);递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。 如果一个值本身是一个数组,将按照相应的键名把它合并为另一个数组。当数组具有相同的数组键名时,后一个值将不会覆盖原来的值,而是附加到后面

    30:数组的差集

    array_diff($arr1,$arr2);返回差集结果数组

    array_diff_assoc($arr1,$arr2,$arr3);返回差集结果数组,键名也做比较

    31:数组的交集

    array_intersect($arr1,$arr2);返回交集结果数组

    array_intersect_assoc($arr1,$arr2);返回交集结果数组,键名也做比较

    range(0,12);创建一个包含指定范围单元的数组

    array_unique($arr);移除数组中重复的值,新的数组中会保留原始的键名

    array_reverse($arr,TRUE);返回一个单元顺序与原数组相反的数组,如果第二个参数为TRUE保留原来的键名

    //srand((float)microtime()*10000000); 随机种子触发器

    array_rand($arr,2);从数组中随机取出一个或 多个元素

    shuffle($arr);将数组的顺序打乱

    functionget($classname)

    {

        $a=__NAMESPACE__.'\\' . $classname;//重要应用:动态创建名称

        returnnew$a;

    }

    <?php

    $message = 'hello';

    // 没有 "use"

    $example=function() {

        var_dump($message);

    };

    echo$example();//NULL

    // 继承 $message

    $example=function()use ($message) {

        var_dump($message);

    };//hello

    用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

    当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

    <?php

    classCallableClass 

    {

        function__invoke($x) {

            var_dump($x);

        }

    }

    $obj=newCallableClass;

    $obj(5);

    ?>//int(5)

    如果两个trait都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。

    为了解决多个trait在同一个类中的命名冲突,需要使用insteadof操作符来明确指定使用冲突方法中的哪一个。

    以上方式仅允许排除掉其它方法,as操作符可以将其中一个冲突的方法以另一个名称来引入。

    traitA {

        publicfunctionsmallTalk() {

            echo'a';

        }

        publicfunctionbigTalk() {

            echo'A';

        }

    }

    traitB {

        publicfunctionsmallTalk() {

            echo'b';

        }

        publicfunctionbigTalk() {

            echo'B';

        }

    }

    classAliased_Talker {

        useA, B {

            B::smallTalk insteadof A;

            A::bigTalkinsteadofB;

            B::bigTalkastalk;

        }

    }

    Talker 使用了traitA 和 B。由于 A 和 B 有冲突的方法,其定义了使用traitB 中的 smallTalk 以及traitA 中的 bigTalk。

    Aliased_Talker 使用了as操作符来定义了 talk 来作为 B 的 bigTalk 的别名。

    (newfruit)->apple();//输出apple

    <?php

    $array = [

        [1, 2],

        [3, 4],

    ];

    foreach($arrayaslist($a, $b)) {

        echo"A: $a; B: $b\n";

    }

    ?>

     使用 ... 运算符定义变长参数函数 

     <?php

    functionf($req, $opt = null, ...$params) {

        // $params 是一个包含了剩余参数的数组

        printf('$req: %d; $opt: %d; number of params: %d'."\n",

               $req, $opt, count($params));

    }

    f(1);

    f(1, 2);

    f(1, 2, 3);

    f(1, 2, 3, 4);

    f(1, 2, 3, 4, 5);

    ?>

    在调用函数的时候,使用 ... 运算符, 将 数组 和 可遍历 对象展开为函数参数。

    <?php

    functionadd($a, $b, $c) {

        return$a + $b + $c;

    }

    $operators = [2, 3];

    echoadd(1, ...$operators);

    ?>

    注:使用...运算符的参数,只能放在函数的参数列表中的最后一位。它的后面不能再有参数。

    加入右连接运算符 ** 来进行幂运算。 同时还支持简写的 **= 运算符,表示进行幂运算并赋值。

    现在支持通过newclass来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

    <?php

    class SomeClass {}

    interfaceSomeInterface {}

    traitSomeTrait {}

    var_dump(newclass(10)extendsSomeClassimplementsSomeInterface {

        private$num;

        publicfunction__construct($num)

        {

            $this->num = $num;

        }

        useSomeTrait;

    });

    从同一namespace导入的类、函数和常量现在可以通过单个use 语句 一次性导入了。

    use some\namespace\ClassA;

    usesome\namespace\ClassB;

    usesome\namespace\ClassC as C;

    usefunction some\namespace\fn_a;

    usefunction some\namespace\fn_b;

    usefunction some\namespace\fn_c;

    useconst some\namespace\ConstA;

    useconst some\namespace\ConstB;

    useconst some\namespace\ConstC;

    // PHP 7+ code

    usesome\namespace\{ClassA, ClassB, ClassC as C};

    usefunction some\namespace\{fn_a, fn_b, fn_c};

    useconst some\namespace\{ConstA, ConstB, ConstC};

    ?>

    PHP 7 增加了新的伪随机字节生成器(CSPRNG)

    $rndByte = random_bytes(6); // 6 是长度

    var_dump(bin2hex($rndByte));// "be2a4c1c3da4"

    $rndInt = random_int(2,10);

    var_dump($rndInt);//int(9)

    PHP 7 新增加了 intdiv() 函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整

    echointdiv(13, 3); //4

    $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");

    $a2=array("e"=>"red","f"=>"green","g"=>"blue");

    //比较多个数组的键值,返回交集

    $result=array_intersect($a1,$a2);

    print_r($result);

    Array( [a] => red [b] => green [c] => blue )

    相关文章

      网友评论

          本文标题:PHP

          本文链接:https://www.haomeiwen.com/subject/ekynnftx.html