PHP数组

发布时间:2023年12月30日

一.数组的概念

1.数组:一个可以存储一组或一系列数值的变量。

2.构成:有一个或多个数组元素组成。

3.数组元素:一个数组元素由 键 和 值 构成。

4.键:元素的识别名称,又为数组下标。

5.值:元素的内容。

6.映射:键 和 值 之间存在的一种对应关系。

7.分类:由 键 的数据类型,数组分为 索引数组 和 关联数组。

8.索引数组:键名为整数的数组。默认情况下,索引数组的键名从 0 开始,或者自由指定键名。

? ? ? eg: 25? ? ? ?47? ? ? ?289? ? 38? ? 93? ? ?----> 值

? ? ? ? ? ? 0? ? ? ? ? 1? ? ? ? ?2? ? ? ? 3? ? ? 4? ? ?-----> 键

<?php
$arr = [
    '上午好',
    '下午好',
    '晚上好',
];
echo $arr[0] ;
echo '<hr>'  ;
echo $arr[1] ;
echo '<hr>'  ;
echo $arr[2] ;
echo '<hr>'  ;
?>

?

? ? ? ?如上代码,创建了数组$arr,键 0 对应的是字符串'上午好',以此类推。

9.关联数组:键名为字符串的数组。

? ? ? ? eg:[id]? ? ? ? ?[name]? ? ?[gender]? ? ?[tel]? ? ------> 键

? ? ? ? ? ? ? ? 10? ? ? ? ? Tom? ? ? ? ? 男? ? ? ? ? ? ?1881808932? -------> 值

<?php
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43") ;
echo "Peter is" . $age['Peter'] ."years old." ;
?>

? ? ?

二.数组的定义和使用

1.定义方法1:array() 语言结构法。

?1.1.定义索引数组:

? ? ? ? ? ? ? $fruits = array('pear','strawberry','pitaya'); ---->省略键名

? ? ? ? ? ? ? ?$sports = array(3 =>'badminton',5 =>'riding');---->指定键名

<?php
$fruits = array('apple', 'grape', 'pear');
echo $fruits[0];
echo '<hr>';
echo $fruits[1];
echo '<hr>';
echo $fruits[2];
echo '<hr>';
?>

?

<?php
$sports = array(2 => 'basketball', 4 => 'swimming');	
echo $sports[2];
echo '<hr>';
echo $sports[4];
echo '<hr>';
?>

1.2.定义关联数组:

? ? ? ? $info = array('id' =>18,'name' =>'Tom','tel' =>18723923);

<?php
$info = array('id' => 10, 'name' => 'Tom', 'tel' => 18810888188);
echo $info['id'];
echo '<hr>';
echo $info['name'];
echo '<hr>';
echo $info['tel'];
echo '<hr>';
?>

? ? 注:键只能是整型或字符串型的数据,如果是其他类型,则会执行类型自动转换;

合法整型的字符串会被转为整型,如“2”转为2,而“02”则不会被转换,因为其不是一个合法的十进制数值;

浮点数会被舍去小数部分直接转换成整型,如2.6转为2 布尔类型的true会被转为1,false转为0;

NULL类型会被转为空字符串‘ ’ ;

若数组中存在相同键名的元素时,后面的元素会覆盖前面元素的值

1.3.定义混合数组:

? ?$mi = array(2,'str','id' => 5 ,6 => 'd' ,'x');

? ?echo $mi['6'];

注:最大数字键名后若有索引元素,则会根据最大数字键名往后赋予键值。

1.4.定义多维数组:包含一个或多个数组的数组称为多维数组。

? ? eg:?

$data = array(
    0 => array('name' => 'Tom', 'gender' => '男'),
    1 => array('name' => 'Lucy', 'gender' => '女'),
    2 => array('name' => 'Jimmy', 'gender' => '男')
);

2.赋值方式:实际上是创建一个数组变量,然后使用赋值运算符直接给变量赋值。

$arr[] = 123;			// 存储结果:$arr[0] = 123
$arr[] = 'hello';			// 存储结果:$arr[1] = 'hello'
$arr[4] = 'PHP';			// 存储结果:$arr[4] = 'PHP'
$arr['name'] = 'Tom';		// 存储结果:$arr['name'] = 'Tom'
$arr[] = 'Java';			// 存储结果:$arr[5] = 'Java'

? 需要注意的是,赋值定义数组是单独为数组元素赋值,无法给空数组定义。

3.定义方法2:短数组定义法

? ? 短数组定义法与 array() 语言结构相同,把array()替换为 [] 即可。

// 相当于:  array('wind', 'fine')
$weather = ['wind', 'fine'];
// 相当于:array('id' => 12, 'name' => 'PHP')
$object = ['id' => 12, 'name' => 'PHP'];
// 相当于:array(array(1, 3), array(2, 4))
$num = [[1, 3], [2, 4]];

4.访问数组:若要查看数组中某个具体的元素,可通过? 数组名[键]? ?的方式获取。

<?php
$sub = ['PHP', 'Java', 'C', 'Android'];
$data = ['goods' => 'clothes', 'num' => 49.90, 'sales' => 500];
echo $sub[1];		// 输出结果:Java
echo '<br/>';
echo $sub[3];		// 输出结果:Android
echo '<br/>';
echo $data['goods'];	// 输出结果:clothes
echo '<br/>';
echo $data['sales'];	// 输出结果:500
?>

? ?另外,若要一次查看数组中所有元素,可使用 print_r()? 和? var_dump()。

<?php
$sub = ['PHP', 'Java', 'C', 'Android'];
$data = ['goods' => 'clothes', 'num' => 49.90, 'sales' => 500];
echo '<pre>';   //保留标签内文本的空格和换行
print_r($sub);	// print_r()函数打印数组变量$sub
var_dump($data);	// var_dump()函数打印数组变量$data
echo '</pre>';

// print_r()打印结果
Array
(
    [0] => PHP
    [1] => Java
    [2] => C
    [3] => Android
)

// var_dump()打印结果
D:\phpstudy_pro\WWW\lesson03\test03.php:6:
array (size=3)
  'goods' => string 'clothes' (length=7)
  'num' => float 49.9
  'sales' => int 500
?>

5.遍历数组:一次访问数组中所有元素。

? ? (1).使用for循环做到。

<?php
$arr = ['PHP', 'Python', 'C', 'Java'];
$arr_len=count($arr);

for($i=0;$i<$arr_len;$i++){
    echo $arr[$i];
    echo "<br/>";
}
?>

? ?(2).使用foreach:遍历无序数组,即数组中的键没有规律。

? ? ? ? ? ? 第一种格式:遍历索引数组
foreach ($array as $value){
循环体 ;
}
? ? ? ? ? ?第二种格式:遍历关联数组
foreach ($array as $key => $value){
循环体 ;
}
//$array 表示数组 as $key 表示键 $value 表示值

eg:

<?php
$student = array(
    "姓名" => "lucy",
    "年龄" => 18,
    "学科" => "PHP编程基础"
);

foreach ($student as $value) {
    echo "Value: " . $value . "<br/>";
}
?>

<?php
$student = array(
    "姓名" => "lucy",
    "年龄" => 18,
    "学科" => "PHP编程基础"
);

foreach ($student as $key => $value) {
    echo "Key: " . $key . ", Value: " . $value . "<br/>";
    
}
?>

6.数组操作符:数组(复合数据类型)可以进行运算。

运算符含义示例说明
+联合$a + $b$a和$b的联合
==相等$a==$b如果$a和$b具有相同的键值对则为true
===全等$a===$b如果$a和$b具有相同的键值对并且顺序和类型都相同则为true
!=不等$a!=$b如果$a不等于$b则为true
<>不等$a<>$b如果$a不等于$b则为true
!==不全等$a!==$b如果$a不全等于$b则为true
<?php
# 1. + 操作符:将两个数组合并,如果有相同的键名,则保留第一个数组中的值。
$array1 = array("a" => "apple", "b" => "banana");
$array2 = array("b" => "blueberry", "c" => "cherry");
$result = $array1 + $array2;
print_r($result); // 输出:Array ( [a] => apple [b] => banana [c] => cherry )
echo '<hr/>';

# 2. == 操作符:判断两个数组是否相等,即键名和键值都相等。
$array1 = array("a" => "apple", "b" => "banana");
$array2 = array("b" => "banana", "a" => "apple");
if ($array1 == $array2) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}
echo '<hr/>';
// 输出:两个数组相等

# 3. === 操作符:判断两个数组是否完全相同,即键名和键值都相等,并且键名的顺序也相同。
$array1 = array("a" => "apple", "b" => "banana");
$array2 = array("b" => "banana", "a" => "apple");
if ($array1 === $array2) {
    echo "两个数组完全相同";
} else {
    echo "两个数组不完全相同";
}
echo '<hr/>';
// 输出:两个数组不完全相同

# 4. != 或 <> 操作符:判断两个数组是否不相等,即键名或键值有一个不相等即可。
$array1 = array("a" => "apple", "b" => "banana");
$array2 = array("b" => "blueberry", "c" => "cherry");
if ($array1 != $array2) {
    echo "两个数组不相等";
} else {
    echo "两个数组相等";
}
echo '<hr/>';
// 输出:两个数组不相等

# 5. !== 操作符:判断两个数组是否不完全相同,即键名或键值有一个不相等,或者键名的顺序不相同即可。
$array1 = array("a" => "apple", "b" => "banana");
$array2 = array("b" => "banana", "a" => "apple");
if ($array1 !== $array2) {
    echo "两个数组不完全相同";
} else {
    echo "两个数组完全相同";
}
// 输出:两个数组不完全相同

?>

7.'' + ''为联合运算符,用于合并数组,若下标相同的元素,则保留第一个数组内的元素。

?eg:

??

<?php
$num = [2, 4];
$alp = ['a', 'b', 'c'];
$mer1 = $num + $alp;
$mer2 = $alp + $num;
print_r($mer1);	
echo '<hr>'; 
print_r($mer2);	
?>

8.合并两个数组,一个当键名,一个当值。使用array_combine函数。

? ?eg:

? ?

<?php
    $a=['id','name','email','age'];
    $b=['1','小马','253166555@qq.com','20'];
    $c=array_combine($a,$b);
    print_r($c);
?>

三.数组的元素操作

1.增加元素: 使用array_push()函数实现,

? ? ? ? ? ? ? ? ? ?语法:array_push($array,value)

? ? eg:

? ?

<?php
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>

2.数组的删除:使用unset()函数实现。

? ? ? ? ? ? ? 语法:

<?php
// 销毁单个数组元素
unset ($bar['quux']);
// 销毁单个变量
unset ($foo);
// 销毁一个以上的变量
unset($foo1, $foo2, $foo3);
?>

? ? ?例如:

? ?

<?php
$foo1=array("渗透测试基础","操作系统","数据库基础","web安全基础","网络基础");
$foo2=array("渗透测试基础","操作系统","数据库基础","web安全基础","网络基础");
$foo3=array("渗透测试基础","操作系统","数据库基础","web安全基础","网络基础");

// 销毁单个数组元素
unset ($foo1[0]);
var_dump($foo1);
echo "<hr/>";

// 销毁单个变量
unset ($foo2);
var_dump($foo2);
echo "<hr/>";

// 销毁一个以上的变量
unset($foo1, $foo3);
var_dump($foo1,$foo2,$foo3);
?>

<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]);
           //↑ 你要删除的数组元素值的键
print_r($array);
echo "<hr/>";
$array = array_values($array);//删除元素后的数组重新索引
print_r($array);
?>

3.数组的修改:使用array_replace()函数实现,用后面数组的值替换第一个数组的值。

? ?(1).修改整个数组:

? ?

<?php 
$a1=array("red","green");
$a2=array("blue","yellow");
var_dump($a1);
echo '<br>';
var_dump(array_replace($a1,$a2));
?>

? ? ?(2).修改数组单个元素:

?

<?php 
$arr=array(11,22,33,44);
print_r($arr);
echo "<hr/>";
$arr[0]=66;  //数组变为$arr=array(66,22,33,44);;
print_r($arr);
?>

?4.数组的查询:使用array_search()函数实现,返回对应的键名。

? ?例如:

? ?

<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
?>

5.确认数组中是否存在指定的键值:使用in_array()函数实现。

? ?例如:

? ??

<?php
$arr=array(666,233,145,990,886,-1);
if(in_array(990,$arr)){
	echo "存在该值";
}else{
	echo "查无此数";
}
?>

四.常用函数

1.元素操作函数:

??

函数名称描述
array_pop()将数组最后一个元素弹出(出栈)
array_push()将一个或多个元素压入数组末尾(入栈)
array_unshift()在数组开头插入一个或多个元素
array_shift()将数组开头元素移出数组
array_unique()将数组中重复的值移出
array_slice()从数组中截取部分数组
array_splice()将数组中的一部分元素去掉并用其他值取代

? ? 例如:

? ??

<?php
# 1. array_pop():从数组末尾删除并返回最后一个元素。
$arr = array('one', 'two', 'three');
$lastElement = array_pop($arr);
echo $lastElement; // 输出:three
echo "<hr/>";


# 2. array_push():将一个或多个元素添加到数组末尾。
$arr = array('one', 'two');
array_push($arr, 'three', 'four');
print_r($arr); // 输出:Array ( [0] => one [1] => two [2] => three [3] => four )
echo "<hr/>";

# 3. array_unshift():将一个或多个元素添加到数组开头。
$arr = array('two', 'three');
array_unshift($arr, 'one');
print_r($arr); // 输出:Array ( [0] => one [1] => two [2] => three )
echo "<hr/>";

# 4. array_shift():从数组开头删除并返回第一个元素。
$arr = array('one', 'two', 'three');
$firstElement = array_shift($arr);
echo $firstElement; // 输出:one
echo "<hr/>";

# 5. array_unique():移除数组中重复的值,并返回新的数组。
$arr = array('one', 'two', 'two', 'three');
$uniqueArr = array_unique($arr);
print_r($uniqueArr); // 输出:Array ( [0] => one [1] => two [3] => three )
echo "<hr/>";

# 6. array_slice():从数组中取出一段元素。
$arr = array('one', 'two', 'three', 'four', 'five');
$slicedArr = array_slice($arr, 1, 3);
print_r($slicedArr); // 输出:Array ( [0] => two [1] => three [2] => four )
echo "<hr/>";

# 7. array_splice():从数组中移除或替换一段元素,并将被移除的元素替换为新的元素。
$arr = array('one', 'two', 'three', 'four', 'five');
$removedArr = array_splice($arr, 1, 2, array('new'));
print_r($arr); // 输出:Array ( [0] => one [1] => new [2] => four [3] => five )
echo "<br/>";
print_r($removedArr); // 输出:Array ( [0] => two [1] => three )
?> 

?例如:

??

<?php
$arr = ['puff', 'Tiramisu'];
array_pop($arr);	          // 移出数组最后一个元素
print_r($arr);	          // 输出结果:Array ( [0] => puff ) 
array_push($arr, 'cookie'); // 在数组末尾添加元素
print_r($arr);	          // 输出结果:Array ( [0] => puff [1] => cookie ) 
array_unshift($arr, 22, 33);// 在数组开头插入多个元素
print_r($arr);	          // 输出结果: Array ( [0] => 22 [1] => 33 [2] => puff [3] => cookie ) 
array_shift($arr);                 // 移出数组第一个元素
print_r($arr);	          // 输出结果:Array ( [0] => 33 [1] => puff [2] => cookie )
?>

2.检索函数:

? ?

函数名称描述
in_array()检查数组中是否存在某个值
array_search()在数组中搜素给定的值,如果成功则返回相应的键名
array_key_exists()检查给定的键名是否存在于数组中

? ?例如:

? ?

<?php
# 1. in_array()函数用于检查一个值是否存在于数组中。
$fruits = array("apple", "banana", "orange");
if(in_array("banana", $fruits)){
    echo "存在";
} else {
    echo "不存在";
}
echo '<hr/>';

# 2. array_search()函数用于在数组中搜索给定的值,并返回对应的键名。
$fruits = array("apple", "banana", "orange");
$key = array_search("banana", $fruits);
if ($key !== false) {
    echo "key: " . $key;
} else {
    echo "不存在";
}
echo '<hr/>';

# 3. array_key_exists()函数用于检查一个数组中是否存在指定的键名。
$fruits = array("apple" => 1, "banana" => 2, "orange" => 3);
if (array_key_exists("banana", $fruits)) {
    echo "存在";
} else {
    echo "不存在";
}
echo '<hr/>';
?> 

??

<?php
$data = ['a' => 1, 'b' => 2, 'c' => 3];
var_dump(in_array(2, $data));	    // 输出结果:bool(true)
var_dump(array_search(2, $data));	    // 输出结果:string(1) "b" 
var_dump(array_key_exists(2, $data)); // 输出结果:bool(false)
?>

3.其他函数:

?

函数名称描述
count()计算数组中的元素数目或对象中的属性个数
range()建立一个包含指定范围元素的数组
array_rand()从数组中随机取出一个或多个元素
array_keys()获取数组中部分或所有的键名
array_values()获取数组中所有的值
array_column()获取数组中指定的一列
array_sum()计算数组中所有值的和
array_reverse()返回一个元素顺序相反的数组

? ? ?例如:

? ? ?

<?php
# 1. count()函数用于返回数组中元素的个数。
$array = [1, 2, 3, 4, 5];
$count = count($array);
echo $count; // 输出:5
echo '<hr/>';

# 2. range()函数用于创建一个包含指定范围内元素的数组。
$numbers = range(1, 5);
print_r($numbers); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
echo '<hr/>';

# 3. array_rand()函数用于从数组中随机选择一个或多个键。
$colors = ['red', 'green', 'blue', 'yellow'];
$randomKey = array_rand($colors);
echo $colors[$randomKey]; // 输出:随机选择的颜色
echo '<hr/>';

# 4. array_keys()函数用于返回数组中所有的键名。
$fruits = ['apple' => 'red', 'banana' => 'yellow', 'orange' => 'orange'];
$keys = array_keys($fruits);
print_r($keys); // 输出:Array ( [0] => apple [1] => banana [2] => orange )
echo '<hr/>';

# 5. array_values()函数用于返回数组中所有的值。
$fruits = ['apple' => 'red', 'banana' => 'yellow', 'orange' => 'orange'];
$values = array_values($fruits);
print_r($values); // 输出:Array ( [0] => red [1] => yellow [2] => orange )
echo '<hr/>';

# 6. array_column()函数用于返回数组中指定的一列。
$students = [
    ['name' => 'John', 'age' => 20],
    ['name' => 'Jane', 'age' => 22],
    ['name' => 'Tom', 'age' => 21]
];
$names = array_column($students, 'name');
print_r($names); // 输出:Array ( [0] => John [1] => Jane [2] => Tom )
echo '<hr/>';

# 7. array_sum()函数用于计算数组中所有值的和。
$numbers = [1, 2, 3, 4, 5];
$sum = array_sum($numbers);
echo $sum; // 输出:15
echo '<hr/>';

# 8. array_reverse()函数用于将数组中的元素顺序反转。
$numbers = [1, 2, 3, 4, 5];
$reversed = array_reverse($numbers);
print_r($reversed); // 输出:Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 )
?> 

? ? ? ?

函数名称描述
array_merge()合并一个或多个数组
array_flip()交换数组中的键和值
array_combine()创建数组,用一个数组的值作为其键名,另一个数组的值作为值
array_chunk()将一个数组分割成多个
array_fill()用给定的值填充数组
array_replace()使用传递的数组替换第一个数组的元素
array_map()为数组中的每个元素应用回调函数
array_walk()使用自定义函数对数组中的每个元素做回调处理

? ?例如:

? ?

<?php
# 1. array_merge(): 将一个或多个数组合并为一个数组。
$array1 = array('red', 'green');
$array2 = array('blue', 'yellow');
$result = array_merge($array1, $array2);
print_r($result); // 输出:Array ( [0] => red [1] => green [2] => blue [3] => yellow )
echo '<hr/>';

# 2. array_flip(): 交换数组中的键和值。
$array = array('a' => 1, 'b' => 2, 'c' => 3);
$result = array_flip($array);
print_r($result); // 输出:Array ( [1] => a [2] => b [3] => c )
echo '<hr/>';

# 3. array_combine(): 创建一个新数组,使用一个数组的值作为键名,另一个数组的值作为键值。
$keys = array('a', 'b', 'c');
$values = array(1, 2, 3);
$result = array_combine($keys, $values);
print_r($result); // 输出:Array ( [a] => 1 [b] => 2 [c] => 3 )
echo '<hr/>';

# 4. array_chunk(): 将一个数组分割成多个数组,每个数组包含指定数量的元素。
$array = array('a', 'b', 'c', 'd', 'e');
$result = array_chunk($array, 2);
print_r($result); // 输出:Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) )
echo '<hr/>';

# 5. array_fill(): 用给定的值填充数组。
$result = array_fill(0, 3, 'apple');
print_r($result); // 输出:Array ( [0] => apple [1] => apple [2] => apple )
echo '<hr/>';

# 6. array_replace(): 使用后面数组的值替换第一个数组的值。
$array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 3, 'c' => 4);
$result = array_replace($array1, $array2);
print_r($result); // 输出:Array ( [a] => 1 [b] => 3 [c] => 4 )
echo '<hr/>';

# 7. array_map(): 将回调函数作用到给定数组的每个元素上,并返回一个新的数组。
$array = array(1, 2, 3);
$result = array_map(function($value) {
    return $value * 2;
}, $array);
print_r($result); // 输出:Array ( [0] => 2 [1] => 4 [2] => 6 )
echo '<hr/>';

# 8. array_walk(): 对数组中的每个元素应用用户自定义的函数。
$array = array('a' => 1, 'b' => 2, 'c' => 3);
array_walk($array, function(&$value, $key) {
    $value = $value * 2;
});
print_r($array); // 输出:Array ( [a] => 2 [b] => 4 [c] => 6 )
?> 

文章来源:https://blog.csdn.net/2301_80919211/article/details/135219065
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。