文章目录

    • 数组内部指针控制
      • current(); 读取指针位置的内容
      • key(); 读取当前指针指向内容的索引值
      • next(); 将数组中的内部指针指向下一单元
      • prev(); 将数组内部指针倒回一位
      • end(); 将数组内部指针指向最后一个元素
      • reset(); 将目前指针指向第一个索引位置
      • list(); 不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组
      • each(); //返回数组当前元素的键值对,并将指针移动到下一个元素位置(php7.2已被废弃)
    • 数组键值操作函数
      • array_values(\$arr); //获得数组的值
      • array_keys(\$arr); //获得数组的键名
      • array_flip(\$arr); //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
      • array_search('PHP',\$arr); //检索给定的值,加true则是严格类型检查
      • array_reverse(\$arr); //将数组中的元素翻转(前后顺序)
      • in_array("apple", \$arr); //在数组中检索apple
      • array_key_exists("apple", \$arr); // 检索给定的键名是否存在数组中
      • array_count_values(\$arr); // 统计数组中所有值出现的次数
      • array_unique(\$arr); // 删除数组中重复的值
      • array_column() 返回数组中指定的一列
      • array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
      • array_fill() 用给定的值填充数组
    • 数组回调函数
      • array_filter(); 使用回调函数过滤数组中的元素 回调返回true则当前的元素被包含到返回数组中
      • array_walk(); 回调函数处理数组 函数要有两个参数 本函数第三个参数可以作为回调第三个参数返回
      • array_map(); //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致
    • 数组的分段和填充
      • array_slice(\$arr, 0, 3); //将数组中的一段取出,此函数忽略键名(数组的分段)
      • array_splice(\$arr, 0, 3,array("black","maroon")); //将数组中的一段取出,返回的序列从原数组中删除
      • array_chunk(\$arr, 3, TRUE); //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)
    • 数组与栈,列队
      • array_push(\$arr, "apple", "pear"); //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数
      • array_pop(\$arr); // 将数组栈的最后一个元素弹出(出栈)
      • array_shift(\$arr); //数组中第一个元素移出并返回(长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变)
      • array_unshift(\$arr,"a",array(1,2)); //在数组的开头插入一个或多个元素
    • 数组的排序
      • sort(\$arr); 由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序
      • rsort(\$arr); 由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序
      • usort(\$arr,"function"); 使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,返回0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序
      • asort(\$arr); 由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序
      • arsort(\$arr); 由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序
      • uasort(\$arr,"function"); 使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序
      • ksort(\$arr); 按照键名正序排序
      • krsort(\$arr); 按照键名逆序排序
      • uksort(\$arr,"function"); 使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)
      • natsort($arr); 自然排序(忽略键名)
      • natcasesort($arr); 自然排序(忽略大小写,忽略键名)
    • 数组的计算
      • array_sum(\$arr); //对数组内部的所有元素做求和运算(数组元素的求和)
      • array_merge(\$arr1, \$arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)
      • array_diff(\$arr1, \$arr2); //返回差集结果数组
      • array_diff_assoc(\$arr1, \$arr2, \$arr3); //返回差集结果数组,键名也做比较
      • array_intersect(\$arr1, \$arr2); //返回交集结果数组
      • array_intersect_assoc(\$arr1, \$arr2); //返回交集结果数组,键名也做比较
    • 其他的数组函数
      • array_unique(\$arr); //移除数组中重复的值,新的数组中会保留原始的键名
      • shuffle(\$arr); // 将数组的顺序打乱
      • array_rand //从数组中随机取出一个或多个单元

数组内部指针控制

current(); 读取指针位置的内容

$arr = [
    'name'=>'antor',
    'age' => 18,
    'sex' => '男',
];

var_dump(current($arr));//string(5) "antor"
end($arr);//将指针指向数组末尾
var_dump(current($arr));//string(5) "男"

key(); 读取当前指针指向内容的索引值

$arr = [
    'name'=>'antor',
    'age' => 18,
    'sex' => '男',
];

var_dump(key($arr));//string(5) "name"
end($arr);//将指针指向数组末尾
var_dump(key($arr));//string(5) "sex"

next(); 将数组中的内部指针指向下一单元

$arr = [
    'name'=>'antor',
    'age' => 18,
    'sex' => '男',
];

var_dump(key($arr));//string(5) "name"
next($arr);//将指针指向数组下一个单元
var_dump(key($arr));//string(5) "age"

prev(); 将数组内部指针倒回一位

end(); 将数组内部指针指向最后一个元素

reset(); 将目前指针指向第一个索引位置

list(); 不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组

$info = array('one', 'two', 'three');

// 列出所有变量
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";

// 列出他们的其中一个
list($drink, , $power) = $info;
echo "$drink has $power.\n";

// 或者让我们跳到仅第三个
list( , , $power) = $info;
echo "I need $power!\n";

// list() 不能对字符串起作用
list($bar) = "abcde";
var_dump($bar); // NULL

each(); //返回数组当前元素的键值对,并将指针移动到下一个元素位置(php7.2已被废弃)

$arr = [
    'name'=>'antor',
    'age' => 18,
    'sex' => '男',
];
var_dump(each($arr));
/*
 array(4) {
  [1] =>string(5) "antor"
  'value' =>string(5) "antor"
  [0] =>string(4) "name"
  'key' =>string(4) "name"
}
 */
var_dump(each($arr));
/*
array(4) {
  [1] =>int(18)
  'value' =>int(18)
  [0] =>string(3) "age"
  'key' =>string(3) "age"
}
*/

数组键值操作函数

array_values($arr); //获得数组的值

$info = array('one'=>'11', 'two'=>22, 'three'=>11);

var_dump(array_values($info));
/**
array(3) {       
[0] =>string(2) "11" 
[1] =>int(22)        
[2] =>int(11)        
}                
 */

array_keys($arr); //获得数组的键名

$info = array('one'=>'11', 'two'=>22, 'three'=>11);

var_dump(array_keys($info));
/**
array(3) {
[0] =>string(3) "one"
[1] =>string(3) "two"
[2] =>string(5) "three"
}
 */

array_flip($arr); //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)

$info = array('one'=>'11', 'two'=>22, 'three'=>11);

var_dump(array_flip($info));
/**
array(2) {
[11] =>
string(5) "three"
[22] =>
string(3) "two"
}
 */

array_search(‘PHP’,$arr); //检索给定的值,加true则是严格类型检查

$info = array('one'=>'11', 'two'=>22, 'three'=>11);

var_dump(array_search(11,$info));//one
var_dump(array_search(11,$info,true));//three

array_reverse($arr); //将数组中的元素翻转(前后顺序)

$info = array(11,'one'=>'11', 'two'=>22, 'three'=>11,44);

print_r(array_reverse($info));
/**
Array                    
(                        
[0] => 44            
[three] => 11        
[two] => 22          
[one] => 11          
[1] => 11            
)                         
 */
print_r(array_reverse($info,true));
/** 
Array                    
(                        
[1] => 44            
[three] => 11        
[two] => 22          
[one] => 11          
[0] => 11            
)                        
 */

in_array(“apple”, $arr); //在数组中检索apple

array_key_exists(“apple”, $arr); // 检索给定的键名是否存在数组中

array_count_values($arr); // 统计数组中所有值出现的次数

$info = array(11,'one'=>'11', 'two'=>22, 'three'=>11,44);

print_r(array_count_values($info));
/**
Array
(
[11] => 3
[22] => 1
[44] => 1
)
 */

array_unique($arr); // 删除数组中重复的值

$info = array(11,'one'=>'11', 'two'=>22, 'three'=>11,44);

print_r(array_unique($info));
/**
Array           
(               
[0] => 11   
[two] => 22 
[1] => 44   
)               
 */

array_column() 返回数组中指定的一列

$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);
print_r(array_column($records, 'first_name'));
print_r(array_column($records,'first_name','id'));
/*
Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter      
)                     
Array
(
    [2135] => John
    [3245] => Sally
    [5342] => Jane
    [5623] => Peter   
)       
 */  

array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);
/**
Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)
*/

array_fill() 用给定的值填充数组

$a = array_fill(5, 3, 'banana');
$b = array_fill(-2, 4, ['bear']);
print_r($a);
/**
Array                        
(                            
[5] => banana            
[6] => banana            
[7] => banana            
) 
 */
print_r($b);
/*                 
Array                        
(                            
[-2] => Array            
(                    
[0] => bear      
)                    
[0] => Array             
(                    
[0] => bear      
)                    
[1] => Array             
(                    
[0] => bear      
)                    
[2] => Array             
(                    
[0] => bear      
)                    

)                            
 */

数组回调函数

array_filter(); 使用回调函数过滤数组中的元素 回调返回true则当前的元素被包含到返回数组中


function odd($var,$key)
{
    // returns whether the input integer is odd
    return (($var & 1) && $key == 'c');
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

print_r(array_filter($array1, "odd",ARRAY_FILTER_USE_BOTH));
echo "Even:\n";
print_r(array_filter($array2, function($var){
    // returns whether the input integer is even
    return (!($var & 1));
}));

array_walk(); 回调函数处理数组 函数要有两个参数 本函数第三个参数可以作为回调第三个参数返回

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

function test_alter(&$item1, $key, $prefix)
{
    $item1 = "$prefix: $item1";
}

function test_print($item2, $key)
{
    echo "$key. $item2<br />\n";
}

echo "Before ...:\n";
array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";

array_walk($fruits, 'test_print');
/**
Before ...:
d. lemon<br />
a. orange<br />
b. banana<br />
c. apple<br />
... and after:
d. fruit: lemon<br />
a. fruit: orange<br />
b. fruit: banana<br />
c. fruit: apple<br />
 */

array_map(); //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致


$func = function($value) {
    return $value * 2;
};

print_r(array_map($func, range(1, 5)));
Array           
(               
    [0] => 2    
    [1] => 4    
    [2] => 6    
    [3] => 8    
    [4] => 10   
)               
//-----------------------------------------------------------

function map_Spanish($n, $m)
{
    return(array($m => $n));
}

$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");


$d = array_map("map_Spanish", $a , $b);
print_r($d);
Array
(
    [0] => Array
        (
            [uno] => 1
        )

    [1] => Array
        (
            [dos] => 2
        )

    [2] => Array
        (
            [tres] => 3
        )

    [3] => Array
        (
            [cuatro] => 4
        )

    [4] => Array
        (
            [cinco] => 5
        )

)

数组的分段和填充

array_slice($arr, 0, 3); //将数组中的一段取出,此函数忽略键名(数组的分段)

$a = array(1, 2, 3, 4, 5);
print_r(array_slice($a,2,2));
print_r(array_slice($a,2,2,true));
Array
(
    [0] => 3   
    [1] => 4   
)              
Array
(
    [2] => 3   
    [3] => 4   
)   

array_splice($arr, 0, 3,array(“black”,“maroon”)); //将数组中的一段取出,返回的序列从原数组中删除

$a = array(1, 2, 3, 4, 5);
print_r(array_splice($a,0,2));
print_r(array_splice($a,0,2,['111','222']));
print_r($a);
Array
(
    [0] => 1             
    [1] => 2             
)                        
Array
(
    [0] => 3             
    [1] => 4             
)                        
Array
(
    [0] => 111           
    [1] => 222           
    [2] => 5             
)   

array_chunk($arr, 3, TRUE); //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)

a = array(1, 2, 3, 4, 5);
print_r(array_chunk($a,2));
print_r(array_chunk($a,2,true));
Array
(
    [0] => Array
    (
        [0] => 1
            [1] => 2
        )

    [1] => Array
(
    [0] => 3
            [1] => 4
        )

    [2] => Array
(
    [0] => 5
)

)
Array
(
    [0] => Array
    (
        [0] => 1
            [1] => 2
        )

    [1] => Array
(
    [2] => 3
            [3] => 4
        )

    [2] => Array
(
    [4] => 5
)

)

数组与栈,列队

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

$a = array('one'=>1, 2, 3, 4, 5);
print_r(array_push($a,'111',['22','333']));
echo PHP_EOL;
print_r($a);
/*
7                        
Array
(
    [one] => 1           
    [0] => 2             
    [1] => 3             
    [2] => 4             
    [3] => 5             
    [4] => 111           
    [5] => Array
(
    [0] => 22    
            [1] => 333   
        )                
                         
) 
*/ 

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

$a = array('one'=>1, 2, 3, 4, 5);
print_r(array_pop($a));
echo PHP_EOL;
print_r($a);
/*
5                  
Array              
(                  
    [one] => 1     
    [0] => 2       
    [1] => 3       
    [2] => 4       
)                  
*/

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

$a = array('one'=>1, 2, 3, 4, 5);
print_r(array_shift($a));
echo PHP_EOL;
print_r($a);
/*
1                  
Array              
(                  
    [0] => 2       
    [1] => 3       
    [2] => 4       
    [3] => 5       
)                  
*/

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

$a = array('one'=>1, 2, 3, 4, 5);
print_r(array_unshift($a,'aa',['111','222']));
echo PHP_EOL;
print_r($a);
/*
7
Array
(
    [0] => aa
    [1] => Array
        (
            [0] => 111
            [1] => 222
        )

    [one] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)
*/

数组的排序

sort($arr); 由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序

$fruits = array(
    "Orange1", "orange2", "Orange3", "orange20"
);
sort($fruits);
foreach ($fruits as $key => $val) {
    echo "fruits[" . $key . "] = " . $val . "\n";
}
/*
fruits[0] = Orange1
fruits[1] = Orange3
fruits[2] = orange2
fruits[3] = orange20
 
*/
echo PHP_EOL;
sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($fruits as $key => $val) {
    echo "fruits[" . $key . "] = " . $val . "\n";
}
/*
 fruits[0] = Orange1
fruits[1] = orange2
fruits[2] = Orange3
fruits[3] = orange20 
*/

rsort($arr); 由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序

usort($arr,“function”); 使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,返回0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序

asort($arr); 由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序

arsort($arr); 由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序

uasort($arr,“function”); 使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序

ksort($arr); 按照键名正序排序

krsort($arr); 按照键名逆序排序

uksort($arr,“function”); 使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)

natsort($arr); 自然排序(忽略键名)

natcasesort($arr); 自然排序(忽略大小写,忽略键名)

数组的计算

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

array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)

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

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

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

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

其他的数组函数

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

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

array_rand //从数组中随机取出一个或多个单元

更多推荐

php常用数组函数