【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)

PHP数组

数组是对大量数据进行有效组织和管理的手段之一,通过数组的强大功能,可以对大量性质相同的数据进行存储、排序、插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。

数组:是一组有序成员(键值对)的集合

  1. 索引数组
  2. 关联数组
// 索引数组:键是从0开始递增的正整数
$arr = [a,b,c,d];
// 除了中括号声明数组也可以用array
$arr1 = array(11,22,33,44);
echo "
";
print_r($arr);
print_r($arr1);
// 索引数组访问
echo $arr[0],$arr[2];
// 更新数组
$arr[3] = 666;
echo "
"
; // ----------------------- // 关联数组:键是“语义化”字符串 如:id uname email $user = ['id'=>1,"email"=>'[email protected]','uname'=>'zhang']; echo "
";
print_r($user);
echo user['uname']; // zhang
// 我们也可以直接赋值时创建
$info['name'] = 'zhang';
var_dump($info);

二维数组和多维数组

// 二维数组 数组中含有数组 [[],[],[]]
$arr = [
    ['username'=>'zhang','email'=>'[email protected]'],
    ['username'=>'admin','email'=>'[email protected]'],
    ['username'=>'shuai','email'=>'[email protected]']
];
echo "
";
print_r($arr);
// 访问二维数组
echo $arr[1]['uname']; // admin
// 使用foreach遍历二维数组中每一项
foreach($arr as $k=>$v){
     
    echo $v["uname"].$v["email"]."
"
; } // foreach 遍历对象 $obj = new class{ public $name = 'admin'; public $email = '[email protected]'; public $gender = true; }; foreach($obj as $key=>$value){ printf("[%s => %s]
"
,$key,$value); }

快速生成数组函数

range() :https://www.php.net/manual/zh/function.range.php

// range(开始值,结束值,步长) 
// 快速生成1-10的数组
$arr1 = range(1,10);
print_r($arr1);
/* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )*/


// step 参数 每次增加的步长
// 生成0 10 20 30 到10的数组
$arr2 = range(0, 100, 10);
print_r($arr2);
/*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )*/

// 也可以生成字母a到i
$arr3 = range('a', 'i');
print_r($arr3);
/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i )*/

echo implode("",range("6 ","Q"));  //space after the 9
// prints 6789:;<=>?@ABCDEFGHIJKLMNOPQ

添加数组元素函数

array_unshift:https://www.php.net/manual/zh/function.array-unshift.php

array_push:https://www.php.net/manual/zh/function.array-push.php

$arr = [22,33,44,55];

// array_unshift() 在数组头部添加元素
array_unshift($arr,11);

// array_push() 在数组尾部添加元素
array_push($arr,66);
print_r($arr);
/* Array ( [0] => 11 [1] => 22 [2] => 33 [3] => 44 [4] => 55 [5] => 66 )*/

删除数组元素函数

array_shift:https://www.php.net/manual/zh/function.array-shift.php

array_pop:https://www.php.net/manual/zh/function.array-pop.php

array_slice:https://www.php.net/manual/zh/function.array-splice.php

$arr = range(a,g);
// 删除头部数组元素
print_r($arr);
/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g )*/
// 删除头部元素a 返回删除的数组元素
echo array_shift($arr); // a
print_r($arr);
/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => g )*/

// 删除尾部数组元素
echo array_pop($arr); // g
print_r($arr);
/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f ) */


// array_splice 去掉数组中的某一部分并用其它值取代

// 一个参数的时候 从当前位置删除到最后
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
var_dump($input);
/* array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } */

// 两个参数,删除从开始位置到结束位置的元素
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, 2);
var_dump($input);
/* array(2) { [0]=> string(3) "red" [1]=> string(6) "yellow" } */

// 三个参数,将开始位置和结束位置的元素替换为指定元素
$input = array("red", "green", "blue", "yellow");
// 注意:负数是从后往前数 -2 -1 0 相当于 第二个到倒数第二个 green blue
array_splice($input, 1, -1, array("black", "maroon"));
var_dump($input);
/* array(4) { [0]=> string(3) "red" [1]=> string(5) "black" [2]=> string(6) "maroon" [3]=> string(6) "yellow" }*/

数组键值操作函数

array_keys 获取数组的键组成的数组

https://www.php.net/manual/zh/function.array-keys.php

$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
$res = array_keys($staff);
print_r(implode("---",$res));
/* id---name---gender---age---salary */

array_key_exists():判断数组的键名或索引是否存在

https://www.php.net/manual/zh/function.array-key-exists.php

$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
// 遍历方式查找索引名
$res = false;
foreach($staff as $key=>$value){
     
    if($key==='age'){
     
        $res = true;
    }
}
echo $res?"存在":"不存在";

// 利用系统内置函数实现 array_key_exists()
$res = array_key_exists("gender",$staff);
echo $res?"存在":"不存在";

array_search — 在数组中搜索给定的值,返回该值对应的索引

https://www.php.net/manual/zh/function.array-search.php

// array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
$array = array(0 => 'blue', 1 => '52', 2 => 'green', 3 => 52);
echo array_search('green', $array); // $key = 2;
echo  array_search(52, $array);   // $key = 1;
// 第三个参数 true,则将在数组中检查完全相同的元素 true  === false ==
echo array_search(52, $array,true);   // $key = 3;

in_array() 检查数组中是否存在某个值,存在返回true 否则false

https://www.php.net/manual/zh/function.in-array.php


$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
     
    echo "'ph' was found\n";
}

if (in_array(array('h', 'r'), $a)) {
     
    echo "'hr' was found\n";
}

if (in_array('o', $a)) {
     
    echo "'o' was found\n";
}
/*
  'ph' was found
  'o' was found
 */
// 第三个可选参数,同样是 true 严格比较=== 默认为false == 
?>

array_values 返回数组中所有的值,并给其重新建立数字索引

https://www.php.net/manual/zh/function.array-values.php

$array = array("size" => "XL", "color" => array("gold",'red',"green"));
echo "
";
print_r(array_values($array));
// 关联数组已被修改为 0 1 2 的索引数组且按照顺序
/*
Array
(
    [0] => XL
    [1] => Array
        (
            [0] => gold
            [1] => red
            [2] => green
        )

)
*/

常用数组回调函数

array_walk 使用自定义函数对数组中的每个元素做回调处理

https://www.php.net/manual/zh/function.array-walk.php

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
// 回调函数的三个形参分别为: 数组的值 ,数组的键,自定义传递的参数
function test_alter(&$item,$key,$prefix){
     
    $item = "$prefix: $item";
}
function test_print($item, $key)
{
     
    echo "{
       $key}.  {
       $item}
\n"
; } array_walk($fruits, 'test_print'); echo "
"
; $fruits = array_values($fruits); array_walk($fruits, 'test_print'); echo "
"
; // 参数分别为:数组、回调函数、回调函数的参数…… array_walk($fruits, 'test_alter', 'fruit'); // 也可以直接传递一个匿名函数 array_walk($fruits, function ($item, $key) { echo "{ $key}. { $item}
\n"
; }); /* d. lemon a. orange b. banana c. apple --------------------------------- 0. lemon 1. orange 2. banana 3. apple -------------------------------- 0. fruit: lemon 1. fruit: orange 2. fruit: banana 3. fruit: apple */ // array_walk的回调函数也可以使用闭包use关键字获取全局变量 下面我们来做一下,给我们最喜欢吃的水果加上My favorite $favorite = 'fruit: orange'; array_walk($fruits,function(&$item,$key,$suffix)use($favorite){ if($item == $favorite){ $item .= $suffix; } },' My favorite'); echo "
"
; array_walk($fruits, 'test_print'); /* 0. fruit: lemon 1. fruit: orange My favorite 2. fruit: banana 3. fruit: apple */

array_map — 为数组的每个元素应用回调函数

https://www.php.net/manual/zh/function.array-map.php

// array_map() 该函数和array_walk功能相似,也是利用回调函数对数组进行处理,只是参数顺序不同
// 返回处理过后的数组,第一个参数回调函数,第二个为数组
$arr = array_map(function($v){
     
    return $v*2;
},[1,2,3,4,5]);
echo implode(",",$arr);
// 2,4,6,8,10

array_filter() 使用回调函数过滤数组中的元素

https://www.php.net/manual/zh/function.array-filter.php

$arr = array_filter([1,2,7,8,10,98],function($v){
     
    return $v>=7;
};
echo "
";
print_r($arr);  
 /*
 Array
(
    [2] => 7
    [3] => 8
    [4] => 10
    [5] => 98
)
*/
// 但是我们看到,过滤后的数组的索引不是从零开始的了,我们需要使用arrya_values处理一下
$res = array_values($arr);    
echo "
";
print_r($res);        
 /*
 Array
(
    [0] => 7
    [1] => 8
    [2] => 10
    [3] => 98
)
*/

数组键值排序函数

函数 说明
sort() 对数组元素进行升序排序(从小到大)。
rsort() 对数组元素进行降序排序(从大到小)。
asort() 对数组元素进行升序排序(从小到大),并保持索引关系。
arsort() 对数组元素进行降序排序(从大到小),并保持索引关系。
ksort() 按照数组的键值对数组进行升序排序(从小到大),并保持索引关系。
krsort() 按照数组的键值对数组进行降序排序(从大到小),并保持索引关系。
// count()和sizeof():获取数组长度 implode():数组转字符串
$num = [8,4,6,7,2,3,18,32,1,23];
echo "count计算数组长度为".count($num)."
"
; // 10 echo "sizeof计算数组长度为".sizeof($num)."
"
; // 10 echo implode(',',$num)."
"
; // 8,4,6,7,2,3,18,32,1,23 // 使用sort排序后的数组(sort升序rsort降序) sort($num); echo implode(',',$num)."
"
; // 1,2,3,4,6,7,8,18,23,32 echo "
";
print_r($num);
/*
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 6
    [5] => 7
    [6] => 8
    [7] => 18
    [8] => 23
    [9] => 32
)
*/

// asort()排序,键值保持原有关系(asort升序arsort降序)
$num = [8,4,6,7,2,3,18,32,1,23];
asort($num);
echo implode(',',$num)."
"
; // 1,2,3,4,6,7,8,18,23,32 echo "
";
print_r($num);
/*
Array
(
    [8] => 1
    [4] => 2
    [5] => 3
    [1] => 4
    [2] => 6
    [3] => 7
    [0] => 8
    [6] => 18
    [9] => 23
    [7] => 32
)
*/

数组内部指针操作

current():返回数组的当前元素

key():返回数组中当前元素的键名

next()与prev():向上/下移动数组指针

reset()和end():将数组内部指针指向数组第一个/最后一个元素

list():把数组中的值赋给一组变量(数组解构)

$arr = ['red','yellow','blue','pink','green','gay'];
echo current($arr); // red
echo key($arr); // 0
next($arr);
echo current($arr); // yellow
next($arr);
echo current($arr); // blue
end($arr);
echo current($arr); // gay
echo current($arr); // gay
reset($arr);
echo current($arr); // red
list($a,$b,,$d)=$arr;
echo $a,$b,$d; // red yellow pink

数组截取函数 array_slice

$num = [11,22,33,44,55,66];
echo "
截取的元素:"
; print_r(implode(',',array_slice($num,2,3)); // 截取的元素:33,44,55

更多相关数组函数

在 PHP 开发过程中,有相当大的部分是与数组打交道,例如入库的内容、统计相关内容等操作都离不开数组,很多信息都是用数组作为载体的。所以数组的操作在 PHP 编程中占有很大的比重,只有熟练地操作数组才能更好的编写 PHP 程序。

除了前面我们介绍到的一些函数外,PHP 中还提供了很多特定功能的数组函数,本节我们就来归纳一下 PHP 中常用的数组处理函数。

访问PHP手册 https://www.php.net/manual/zh/ref.array.php 来查看更详细的内容

数组的键/值操作:

  • array_keys():获得数组中的键名
  • array_values():获取数组中所有元素的值
  • array_flip():交换数组中的键和值
  • array_key_exists():检测键名是否位于数组中
  • array_search():在数组中搜索给定的值并返回键名或索引

数组的拆分、合并:

  • array_slice():截取数组的一部分
  • array_merge():数组合并
  • array_chunk():分割数组

数组的填充与清除:

  • array_splice():删除数组中的某一部分并用其它值取代
  • array_pad():用给定的值填充数组
  • array_push():在数组尾部插入元素
  • array_pop():删除数组末尾的元素
  • array_shift():删除数组开头的元素
  • array_unshift():在数组开头插入元素
  • array_fill():以填充数据的方式创建新数组
  • array_fill_keys():使用指定的键和值来填充数组

数组的计算:

  • array_sum():计算数组中所有元素的和
  • array_product():计算数组中所有元素的乘积

其它数组函数:

  • is_array():判断是否为数组
  • array_rand():随机获取数组元素
  • shuffle():随机打乱数组

今日份作业

  1. 如何将以下二维数组里的键值name换成user ,其他保持不变? $data = [[‘name’=>‘zhangdan’,‘id’=>2],[‘name’=>‘lisi’,‘id’=>1]];

$data = [['name'=>'zhangdan','id'=>2],['name'=>'lisi','id'=>1]]; 
echo "
";
print_r($data);
array_walk($data,function(&$arr,$k,$name){
     
	 $arr[$name]=$arr['name'];
	 unset($arr['name']);
},'user');
echo "
";
print_r($data);
?>
  1. 生成一个由1-100组成的数组,要求返回该数组中的偶数组成的新数组,并且新数组的索引从0开始?

	$arr = range(1,100);
     print_r($arr);
     $res = array_filter($arr,function($v){
     
        return $v%2==0;
     });
     print_r(array_values($res));
?>

今日份语录

大多数的痛苦,都是因为自己跟自己过不去。心是收藏快乐的,别让它困于计较中,最后都盛了痛;别总执迷于困境,挤走原本难得的快乐。

你可能感兴趣的:(PHP,php)