php方法/面试汇总

global定义的全局常量和$GLOBALS的区别

$GLOBALS(超全局变量) — 引用全局做用域中可用的所有变量, 一个包含了所有变量的全局组合数组。变量的名字就是数组的键
php

<?php
function test() {
 $foo = "local variable";     
echo 'GLOBALS: ' . $GLOBALS["foo"] . "\n";    
echo '$foo in current scope: ' . $foo . "\n";
} 
$foo = "Example content";
test();
?>
//结果
GLOBALS:Example content
$foo in current scope:local variable复制代码

global的做用是定义全局变量,可是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的全部文件
html

使用关键字“global”你就能够把全局数据导入到一个函数的局部范围内
数组

<?php
$a = 1;
$b = 2;
function Sum()
{
    global $a, $b; //若是没有全局变量global在方法内是不能得到$a,$b值的
    $b = $a + $b;
}
Sum();
echo $b;
?>
//结果
3复制代码

在函数体内定义的global变量,函数体外能够使用,在函数体外定义的global变量不能在函数体内使用
bash

<?php
global $a; 
$a=123; //必须分开赋值
function f() { 
echo $a; //错误
} 

//再看看下面一例 
function f() {
 global $a; 
 $a=123; 
} 
f(); 
echo $a; //正确,能够使用复制代码


const 定义的常量和define()定义的常量的区别

1.const用于类成员变量的定义,一经定义,不可修改。define不能够用于类成员变量的定义,可用于全局常量。函数

2.const可在类中使用,define不能(通常是define在类外定义常量,const在类内定义常量)网站

3.const不能再条件语句中定义常量ui

<?php
if (...){const FOO = 'BAR';    // 无效的invalid
}if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>复制代码

4.const采用普通的常量名称,define能够采用表达式做为名称
spa

<?php
const  FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
?>复制代码

5.const只能接受静态的标量,而define能够采用任何表达式
.net

<?php
const BIT_5 = 1 << 5;    // 无效的invalid
define('BIT_5', 1 << 5); // 有效的valid
?>复制代码

6.const定义的常量时大小写敏感,而define能够经过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感
code

<?php
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
?>复制代码

7.const是语言结构,define是函数,const更快

PHP排序函数

  • sort() 函数用于对数组单元从低到高进行排序。
  • rsort() 函数用于对数组单元从高到低进行排序。
  • asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
  • arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
  • ksort() 函数用于对数组单元按照键名从低到高进行排序。
  • krsort() 函数用于对数组单元按照键名从高到低进行排序。

参考文章

array_multisort:对列表型二维数组排序

$data = array();
        $data[] = array('volume' => 67, 'edition' => 2);
        $data[] = array('volume' => 86, 'edition' => 1);
        $data[] = array('volume' => 85, 'edition' => 6);
        $data[] = array('volume' => 98, 'edition' => 2);
        $data[] = array('volume' => 86, 'edition' => 6);
        $data[] = array('volume' => 67, 'edition' => 7);
        $volume = array_column($data,'volume');
        $edition = array_column($data,'edition');
        //按照volume升序排
        array_multisort($volume,SORT_ASC,$data);
        
        //按照volume升序排,volume同样就按照edition降序排
        //array_multisort($volume,SORT_ASC,$edition,SORT_DESC,$data);
        print_r($data);复制代码


str_repeat

str_repeat() 函数把字符串重复指定的次数。

echo str_repeat("Shanghai",2);
//结果:ShanghaiShanghai复制代码

array_filter

用回调函数过滤数组中的单元(文档)

大部分能够用来过滤数组空的元素

$data = [1,0,3,false,'',null,"tom",'0'];
print_r(array_filter($data));
//结果
Array
(
    [0] => 1
    [2] => 3
    [6] => tom
)复制代码

有回调函数的时候(该函数把输入数组中的每一个键值传给回调函数。若是回调函数返回 true,则把输入数组中的当前键值返回结果数组中,若是是false就不返回。数组键名保持不变):

$arr = ['a','b',1,2,3];
$new_arr = array_filter($arr,function($val){
     return is_numeric($val); //过滤不是数字的值,is_numeric返回bool值
});
print_r($new_arr);
//结果:
Array
(
    [2] => 1
    [3] => 2
    [4] => 3
)
复制代码

array_pop

弹出数组最后一个单元(出栈),原来的数据中将不再也不有最后一个值了。

$data = [1, 2, 3, 4];
print_r(array_pop($data));
//结果:
4复制代码

$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];
print_r(array_pop($data));
//结果:
Array
(
    [name] => zzz
    [age] => 30
)复制代码

array_shift

第一个单元移出并做为结果返回,将 array 的长度减一并将全部其它单元向前移动一位。全部的数字键名将改成从零开始计数,文字键名将不变。

$data = [1, 2, 3, 4];
print_r(array_shift($data));
print_r($data);
//结果:
1
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
)复制代码

$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];

        print_r(array_shift($data));
        print_r($data);
//结果:
Array
(
    [name] => xxx
    [age] => 12
)
Array
(
    [0] => Array
        (
            [name] => yyy
            [age] => 20
        )

    [1] => Array
        (
            [name] => zzz
            [age] => 30
        )

)复制代码

array_slice

截取数组

$data = [1, 2, 3, 4];
print_r(array_slice($data,1,2));
print_r(array_slice($data,-1,1));
//结果:
Array
(
    [0] => 2
    [1] => 3
)
Array
(
    [0] => 4
)复制代码

$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];
        print_r(array_slice($data,1,2));
        print_r(array_slice($data,-1,1));
//结果:
Array
(
    [0] => Array
        (
            [name] => yyy
            [age] => 20
        )

    [1] => Array
        (
            [name] => zzz
            [age] => 30
        )

)
Array
(
    [0] => Array
        (
            [name] => zzz
            [age] => 30
        )

)复制代码

array_map

为数组的每一个元素执行回调函数,返回一个新的数组

<?php
$arr = [1,3,5];
$res = array_map(function($val){
    return $val*10; //每一个值乘10
},$arr);
print_r($res);
print_r($arr);
//结果:
Array
(
    [0] => 10
    [1] => 30
    [2] => 50
)
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)复制代码

多个数组的时候:

$arr1 = [1,2,3,4,5];
$arr2 = [6,7,8,9,10];
$res = array_map(function($val1,$val2){
    return $val1 + $val2;
},$arr1,$arr2);
print_r($res);
//结果:
Array
(
    [0] => 7
    [1] => 9
    [2] => 11
    [3] => 13
    [4] => 15
)
复制代码

array_walk

使用用户自定义函数对数组中的每一个元素作回调处理,成功时返回 TRUE, 或者在失败时返回 FALSE

<?php
//将数组中的元素用于某种操做
$arr = ['a','b','c'];
array_walk($arr,function(&$val,$key){
    $val .= $val;
});
print_r($arr);
//结果:
Array
(
    [0] => aa
    [1] => bb
    [2] => cc
)
复制代码

异同点  

  • array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组  
  • array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组  
  • array_walk() 重点在于遍历数组进行某种操做  
  • array_filter() 和 array_walk()对一个数组进行操做,数组参数在前,函数参数在后  array_map() 能够处理多个数组,所以函数参数在前,数组参数在后,能够根据实际状况放入多个数组参数
相关文章
相关标签/搜索