17.PHP基础-数组

PHP数组

一.概念

数组:array 数组的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的数据

二.语法

在php中系统提供多种定义数组的方式

1.使用array关键字:最常用的

$变量名 = array(元素1,元素2,元素3)

php 复制代码
$arr1 = array('1',2,'hello');
var_dump($arr1);
print_r($arr1);
//结果如下
/* 
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  int(2)
  [2]=>
  string(5) "hello"
}
Array
(
    [0] => 1
    [1] => 2
    [2] => hello
)
*/

2.可以使用中括号来包裹数据

$变量名 = [元素1,元素2,元素3]

php 复制代码
$arr2 = ['1', 2, 'hello'];
var_dump($arr2);
print_r($arr2);
//结果如下
/* 
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  int(2)
  [2]=>
  string(5) "hello"
}
Array
(
    [0] => 1
    [1] => 2
    [2] => hello
)
 */

3.隐形定义数组:给变量增加一个中括号,系统自动变成数组

$变量名[] = 值1 //如果不提供下标也可以,系统自动生成(数字:从0开始)

$变量名[下标] = 值 //中括号里面的内容称之为下标,key;该下标可以是字母(单词)或者数字,与变量命名规则相似

php 复制代码
$arr3[] = 1;
$arr3[10] = 100;
$arr3[] = '1'; //默认从当前前面最大的下标开始(自动)
$arr3['key'] = 'key';

var_dump($arr3);
print_r($arr3);

//结果如下
/* 
array(4) {
  [0]=>
  int(1)
  [10]=>
  int(100)
  [11]=>
  string(1) "1"
  ["key"]=>
  string(3) "key"
}
  Array
(
    [0] => 1
    [10] => 100
    [11] => 1
    [key] => key
)
*/

三.特点

1.可以证书下标或者字符串下标

如果数组下标都为整数:索引数组

如果数组下标都为字符串:关联数组

2.不同下标可以混合存在:混合数组

3.数组元素的顺序以放入顺序为准,跟下标无关

php 复制代码
$arr3[] = 1;
$arr3[10] = 100;
$arr3[] = '1';
$arr3['key'] = 'key';
print_r($arr3);

$arr3[1] = 'value';;
print_r($arr3);
/* 

Array
(
    [0] => 1
    [10] => 100
    [11] => 1
    [key] => key
)
Array
(
    [0] => 1
    [10] => 100
    [11] => 1
    [key] => key
    [1] => value //按照放入顺序为准而不是下标
)
*/

4.数字下标的自增长特性:从0开始自动。如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始

复制代码

5.特殊值下标的自动转换

布尔值:true和false

空:null

php 复制代码
$arr4[false] = false;
$arr4[true] = true;
$arr[NULL] = NULL;
print_r($arr4);
var_dump($arr4);
/* 
Array ( [0] => [1] => 1 ) 
array(2) { [0]=> bool(false) [1]=> bool(true) }
*/

6.php中数组元素没有类型限制

7.PHP中数组元素没有长度限制

补充:php中的数组是很大的数据,所以储存位置是堆区,为当前数组分配一块连续的内存,

四.多维数值

多维数组:数组里面的元素又是数组

4.1 二维数组

数组中所有的元素都是一维数组

php 复制代码
$info = array(
  array('name' => 'yy', 'age' => 18),
  array('name' => 'Tom', 'age' => 34),
  array('name' => 'Jim', 'age' => 20) //最后一个元素,后面可以跟逗号不影响(不建议)
);
print_r($info);
/* 
Array
(
    [0] => Array
        (
            [name] => yy
            [age] => 18
        )

    [1] => Array
        (
            [name] => Tom
            [age] => 34
        )

    [2] => Array
        (
            [name] => Jim
            [age] => 20
        )

)
*/

4.2 多维数组

在第二维的数组元素中可以继续是数组,在php中没有维度限制(PHP本质并没有二维数组)

  • PHP 的 数组其实就是一个哈希表(键值对集合) ,而键对应的值可以是任何类型------包括另一个数组。

  • PHP 没有真正"连续的二维内存结构";

  • 所谓"多维数组"只是"嵌套数组"而已。

但是,不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率

4.3 异形数组(不规则数组)

异型数组:数组中的元素不规则,有不同基本变量也有数组。

在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)

五.数组的遍历

5.1 遍历的基本含义

数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据都需要一次输出出来,就需要使用一些简化的规则来实现自动获取下标以及输出数组元素

php 复制代码
$arr = array(0=>array('name'=>'Tom'),1=>array('name'=>"Jim"))//二维数组
//访问一维元素:$arr[一维下标]
$arr[0] //结果array('name'=>'Tom')
//访问二维元素:$arr[一维下标][二维下标]
$arr[1]['name'] //Jim
  

5.2 foreach 遍历

语法
php 复制代码
foreach (iterable_expression as $value) {
    statement_list
}
foreach (数组变量名/变量表达式 as $元素值) {
   $元素值 //
}

foreach (数组变量名/变量表达式 as $元素下标名=>$元素值 {
    $元素下标名 ,$元素值
}//这里的$元素下标名$元素值可以随意命名
原理

Foreach 遍历的原理:本质是数组的内部有一颗指针,默认是只想数组元素的第一个元素

foreahc就是利用指针去获取数据,同时移动指针

1.foreach 会重置指定:让指针指向第一个元素

2.进入foreach循环:通过指针去的当前第一个元素,然后将下标取出放到对应的下标变量中(如果存在),将值去除来放到对应的变量$v中

3.进入到循环内部(循环体),开始执行

4.重复2和3,一直到2的时候遇到指针取不到内容(指针指向数组最后)

注意:

PHP 的 foreach 的确依赖数组内部的"指针",默认从第一个元素开始遍历;

但它为了安全与性能,会使用指针快照引用模式来控制是否修改原数组。

按值遍历(默认)
php 复制代码
foreach ($arr as $value) { ... }

→ 此时会复制哈希表的内部指针快照,不影响原数组的指针位置。

按引用遍历
php 复制代码
foreach ($arr as &$value) { ... }

→ 这时它直接操作原数组的内部结构,指针确实在"动",而且一旦出错可能留下引用"污染"。

举个例子:

php 复制代码
$arr = [1, 2, 3];
foreach ($arr as &$v) {}//按引用遍历
foreach ($arr as $v) { echo $v; }//按值遍历 (按值遍历(默认)// 输出 1 2 2 !!!
因为上一个循环留下了引用,导致 $v 仍绑定最后一个元素。
示例
php 复制代码
/* Example: value only */
$array = [1, 2, 3, 17];

foreach ($array as $value) {
    echo "Current element of \$array: $value.\n";
}

/* Example: key and value */
$array = [
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
];

foreach ($array as $key => $value) {
    echo "Key: $key => Value: $value\n";
}

/* Example: multi-dimensional key-value arrays */
$grid = [];
$grid[0][0] = "a";
$grid[0][1] = "b";
$grid[1][0] = "y";
$grid[1][1] = "z";

foreach ($grid as $y => $row) {
    foreach ($row as $x => $value) {
        echo "Value at position x=$x and y=$y: $value\n";
    }
}

/* Example: dynamic arrays */
foreach (range(1, 5) as $value) {
    echo "$value\n";
}

5.3 for 循环

for循环:基于已知边界条件(起始和结束)然后有条件的变化(规律)

因此:for循环遍历数组有对应条件

1.获取数组长度:count(数组)得到数组元素的长度

2、要求数组元素的下标是规律的数字

示例
php 复制代码
//数组特点:索引数组,下标规律
$arr = array(1, 2, 3, 4, 5, 6, 7);
for ($i = 0,$len=count($arr) $i < $len; $i++) {
  echo 'key is:', $i, ' and value is: ', $arr[$i], '<br/>';
};
//结果
/* 
key is:0 and value is: 1
key is:1 and value is: 2
key is:2 and value is: 3
key is:3 and value is: 4
key is:4 and value is: 5
key is:5 and value is: 6
key is:6 and value is: 7
*/

//第二种写法
$arr = array(1, 2, 3, 4, 5, 6, 7);
for ($i = 0, $len = count($arr); $i < $len; $i++) {
  echo 'key is:', $i, ' and value is: ', $arr[$i], '<br/>';
};

5.4 while配合each和list遍历数组

while是子啊外部定义边界条件,如果要实现可以和for循环

5.4.1 each函数

Php7.2 起已废弃 php8已删除

each() 被移除的原因是:

它和 foreach 重复功能太多,还容易造成引用混乱和性能损耗。

each 能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到以后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回

0 下标=>取的元素的下标值

1 下标=>取得元素的值

key下标=>取得元素的下标值

value下标=>取得元素的值

5.4.2 list函数
php 复制代码
list(mixed $var, mixed ...$vars = ?): array

array() 类似, **list()**实际上并非函数,而是一种语言结构。它用于一次性赋值多个变量。只有实现了ArrayAccess接口的数组和对象才能被 **list() 解包。list()**表达式不能为空。

没有返回值,从索引0开始

示例

php 复制代码
$info = array('coffee', 'brown', 'caffeine');

// Listing all the variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n"; 
//coffee is brown and caffeine makes it special.

$info = array('coffee', 2 => 1);
list($first) = $info;
//string(6) "coffee"

$info = array('coffee', 2 => 1);
list($first, $second) = $info;
var_dump($first, $second); //没有下标1 的值 所以会报错Warning:  Undefined array key

因php8直接删除了each所以旧写法php5.0:

php 复制代码
while (list($key, $value) = each($arr)) {
    echo "$key => $value\n";
}

应改为用foreach

如果你真的需要"指针式遍历"

有时候你可能想模仿 each() 的行为(例如边遍历边修改数组、或用 next() 手动控制)。

那可以改成这样:

php 复制代码
reset($arr); // 指针指向第一个元素
while (($key = key($arr)) !== null) {
    $value = current($arr);
    echo "$key => $value\n";
    next($arr); // 移动指针
}

这个版本等价于 while + each,只是用现代方式写出来。

底层逻辑完全一样:key()current() 取数据,next() 推进指针。

5.5 数组相关函数

5.5.1 排序函数

sort
作用

Ascending 升序排序

按照升序(从小到大)给数组排序

语法
php 复制代码
sort(array &$array, int $flags = SORT_REGULAR): true
注意
  • 如果两个元素相等,它们将保持原有顺序。在 PHP 8.0.0 之前,它们在排序数组中的相对顺序是未定义的。

  • 此函数会为元素分配新键array。它会删除任何可能已分配的现有键,而不仅仅是重新排列键。

  • 将数组的内部指针重置为第一个元素。

参数

$array 原数组

$flags 默认值 SORT_REGULAR

第二个可选参数flags 可用于修改排序行为,其值如下:

排序类型标志:

返回值

总是返回true

php8.0 返回值的类型是true之前是bool

示例
php 复制代码
$info = array('coffee', 'brown', 'caffeine');


echo sort($info) . PHP_EOL; //1
var_dump(sort($info)); //bool(true)
print_r($info);
/* 
Array
(
    [0] => brown
    [1] => caffeine
    [2] => coffee
)
*/
$numList = [8, 7, 6, 5, 4, 3, 2, 1];
sort($numList);
print_r($numList); 
/* 
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)
*/
rsort
作用

Descending sort 降序排序,r-reverse反向,从大到小

语法
复制代码
rsort(array &$array, int $flags = SORT_REGULAR): true
参数

$array 原数组(&引用会改变原数组)

$flags 标志位 默认值 SORT_REGULAR常规排序

返回值

总是返回true

示例
php 复制代码
$numList = [8, 7, 6, 5, 4, 3, 2, 1];
sort($numList);
print_r($numList);
/* 
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)
*/
rsort($numList);
print_r($numList);
/* 
Array
(
    [0] => 8
    [1] => 7
    [2] => 6
    [3] => 5
    [4] => 4
    [5] => 3
    [6] => 2
    [7] => 1
)
*/
asort

a-associative 关联的

asort()associative sort,即"按值排序但保留键名"

作用

按升序对数组进行排序,并保留索引关联(即索引关系不变)

语法
php 复制代码
asort(array &$array, int $flags = SORT_REGULAR): true
参数

$array 原数组 引用 会更改原数组

$flags

第二个可选参数flags 可用于修改排序行为,其值如下:

排序标志类型:

返回值

true

示例
php 复制代码
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
/* 
c = apple
b = banana
d = lemon
a = orange
*/
$numList = [5, 4, 3, 2, 1];
print_r($numList);
asort($numList);
print_r($numList);


/* 
Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)

Array
(
    [4] => 1
    [3] => 2
    [2] => 3
    [1] => 4
    [0] => 5
)
*/
arsort
作用

按降序对数组进行排序,并保留索引关联(即索引关系不变)

语法
php 复制代码
arsort(array &$array, int $flags = SORT_REGULAR): true
参数

$array 原数组 引用会改变原数组

$flags 排序规则默认SORT_REGULAR

返回值

true

示例
php 复制代码
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
/* 
a = orange
d = lemon
b = banana
c = apple
*/
$numList = [1, 2, 3, 4, 5];
print_r($numList);
arsort($numList);
print_r($numList);


/* 
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
    [4] => 5
    [3] => 4
    [2] => 3
    [1] => 2
    [0] => 1
)
*/
ksort
作用

根据索引值来升序排序

语法
php 复制代码
ksort(array &$array, int $flags = SORT_REGULAR): true
参数

&$array 引用原数组会改变原数组

flags 标志位 排序规则 默认SORT_REGULAR

返回值

true

示例
php 复制代码
<?php
echo "<pre>";
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
/* 
a = orange
b = banana
c = apple
d = lemon
*/
$numList = [5 => 5, 4 => 4, 3 => 3, 2 => 2, 1 => 1];
print_r($numList);
ksort($numList);
print_r($numList);


/* 
Array
(
    [5] => 5
    [4] => 4
    [3] => 3
    [2] => 2
    [1] => 1
)
Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)
*/
echo "</pre>";
krsort
作用

根据索引值降序排序

语法
复制代码
krsort(array &$array, int $flags = SORT_REGULAR): true
参数

&$array 引用原数组 会改变原数组

$flags 标志位 排序规则默认SORT_REGULAR

返回值

true

示例
php 复制代码
<?php
echo "<pre>";
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
krsort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
/* 
d = lemon
c = apple
b = banana
a = orange
*/
$numList = [0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1];
print_r($numList);
krsort($numList);
print_r($numList);


/* 
Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)
Array
(
    [4] => 1
    [3] => 2
    [2] => 3
    [1] => 4
    [0] => 5
)
*/
echo "</pre>";
shuffle
作用

打乱数组,底层实现本质上是按值重排索引数组,所以索引会变成连续数字索引

语法
复制代码
shuffle(array &$array): true
参数

&$array 引用数组 会改变原数组

返回值

true

示例
php 复制代码
<?php
echo "<pre>";
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
shuffle($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
/* 
0 = apple //索引被修改为数字连续索引
1 = orange
2 = lemon
3 = banana
*/
$numList = [0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1];
print_r($numList);
shuffle($numList);
print_r($numList);


/* 
Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)
Array
(
    [0] => 3
    [1] => 5
    [2] => 2
    [3] => 4
    [4] => 1
)
*/
echo "</pre>";

5.5.2 指针函数

reset
作用

将数组内部指针重置为第一个元素

语法
php 复制代码
reset(array|object &$array): mixed
参数

&$array 引用原数组会改变原数组

返回值

返回数组第一个元素的值,如果数组为空则返回false。

示例
php 复制代码
<?php
echo "<pre>";
$array = array('step one', 'step two', 'step three', 'step four');

//默认取第一个元素
echo current($array) . "<br />\n"; // "step one"

// 跳过两个元素
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"

//重置指针,则指向第一个元素
echo reset($array) . PHP_EOL; // "step one"
echo current($array) . "<br />\n"; // "step one"
echo "</pre>";
end
作用

设置数组指针指向最后一个元素

语法
php 复制代码
end(array|object &$array): mixed
参数

&$array 引用原数组 会改变原数组

返回值

返回最后一个元素的值 如果值为空则返回false

示例
php 复制代码
<?php
echo "<pre>";
$array = array('step one', 'step two', 'step three', 'step four');

//默认取第一个元素
echo current($array) . "<br />\n"; // "step one"

// 跳过两个元素
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"

//重置指针指向末尾
echo end($array) . PHP_EOL; // "step four"
echo current($array) . "<br />\n"; // "step four"
echo "</pre>";
next
作用

设置数组指针指向下一个元素

语法
复制代码
next(array|object &$array): mixed
参数

&$array 引用原数组 会改变原数组

返回值

返回下一个元素的值 如果值为空则返回false

示例
php 复制代码
$transport = array('foot', 'bike', 'car', 'plane');
echo $mode = current($transport), PHP_EOL; // $mode = 'foot';
echo $mode = next($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = next($transport), PHP_EOL;    // $mode = 'car';
echo $mode = prev($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = end($transport), PHP_EOL;     // $mode = 'plane';
prev
作用

设置数组指针指向上一个元素

语法
复制代码
prev(array|object &$array): mixed
参数

&$array 引用原数组 会改变原数组

返回值

返回上一个元素的值 如果值为空则返回false

示例
php 复制代码
$transport = array('foot', 'bike', 'car', 'plane');
echo $mode = current($transport), PHP_EOL; // $mode = 'foot';
echo $mode = next($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = next($transport), PHP_EOL;    // $mode = 'car';
echo $mode = prev($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = end($transport), PHP_EOL;     // $mode = 'plane';
current
作用

获取当前指针指向的元素

语法
复制代码
current(array|object $array): mixed
参数

$array原数组

返回值

current() 函数仅返回内部指针当前指向的数组元素的值。它不会以任何方式移动指针。如果内部指针指向元素列表的末尾之外或数组为空,则current()返回 false

示例
php 复制代码
$transport = array('foot', 'bike', 'car', 'plane');
echo $mode = current($transport), PHP_EOL; // $mode = 'foot';
echo $mode = next($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = next($transport), PHP_EOL;    // $mode = 'car';
echo $mode = prev($transport), PHP_EOL;    // $mode = 'bike';
echo $mode = end($transport), PHP_EOL;     // $mode = 'plane';
key
作用

从数组中获取键

语法
php 复制代码
key(array|object $array): int|string|null
参数

$array 原数组

返回值

key ()函数仅返回内部指针当前指向的数组元素的键。它不会以任何方式移动指针。如果内部指针指向元素列表的末尾之外或数组为空,则 key()返回 null

示例
php 复制代码
<?php
echo "<pre>";
$array = array(
  'fruit1' => 'apple',
  'fruit2' => 'orange',
  'fruit3' => 'grape',
  'fruit4' => 'apple',
  'fruit5' => 'apple'
);

// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
  if ($fruit_name == 'apple') {
    echo key($array), "\n";
  }
  next($array);
}
/* 
fruit1
fruit4
fruit5
*/
echo "</pre>";

5.5.3 其他函数

count
作用

统计数组中所有元素的数量

语法
php 复制代码
count(Countable|array $value, int $mode = COUNT_NORMAL): int
参数

$value 数组或者 Countable 对象。

$mode 如果可选的 mode 参数设为 COUNT_RECURSIVE (或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。

警告

count() 能检测递归来避免无限循环,但每次出现时会产生 E_WARNING 错误 (如果 array 不止一次包含了自身)并返回大于预期的统计数字。

例如:如果你不小心搞了一个"自己包含自己的数组",就可能触发这个警告。

返回值

返回 value 中的元素的数量。

在 PHP 8.0.0 之前,如果参数既不是数组也不是实现了 Countable 接口的对象,将返回 1

valuenull 时返回 0

示例
php 复制代码
<?php
echo "<pre>";
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
var_dump(count($a)); //int(3)

$b[0]  = 7;
$b[5]  = 9;
$b[10] = 11;
var_dump(count($b)); //int(3)
echo "</pre>";
countable

CountablePHP 的一个接口(interface)

接口就像一个"约定"------如果一个类实现了它,就必须提供某个方法。

在这个例子里:

php 复制代码
interface Countable {
    public function count(): int;
}

也就是说:

  • 任何实现了 Countable 接口的对象,都必须 有一个 count() 方法;
  • 然后 count($obj) 调用时,PHP 会自动调用 $obj->count()

举个例子:

php 复制代码
class Box implements Countable {
    private array $items = ['apple', 'banana', 'pear'];

    public function count(): int {
        return count($this->items);
    }
}

$box = new Box();
echo count($box); // 输出 3

所以,count() 不仅能统计数组,也能统计"可数的对象",前提是对象实现了 Countable 接口。

array_push
作用

将一个或多个单元压入数组的末尾(入栈)

语法
php 复制代码
array_push(array &$array, mixed $value1, mixed $... = ?): int
参数

&$array 改变原数组

$value 可以穿多个需要数组末尾压入的元素

返回值

返回处理之后数组的元素个数。

示例
php 复制代码
<?php
echo "<pre>";

$arr = [1, 2, 3, 4, 5];
echo array_push($arr, 6, 7, 8) . PHP_EOL; //8
print_r($arr);
/* 

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)
*/
echo "</pre>";
array_pop

pop:抛出

作用

从数组末尾弹出元素(出栈)

语法
php 复制代码
array_pop(array &$array): mixed
参数

&$array) 引用原数组 会改变原数组

返回值

返回被踢出的元素。如果array数组为空, 则返回 null。

示例
php 复制代码
$arr = [1, 2, 3, 4, 5];
print_r(array_pop($arr)); //5
print_r($arr);
/* 
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/
array_reverse
作用

返回一个元素顺序颠倒的数组

语法
php 复制代码
array_reverse(array $array, bool $preserve_keys = false): array
参数

$array 不改变原数组

$preserve_keys

  • false(默认) → 不保留原键名(数字键会被重置,字符串键也会被重置成 0,1...?实际上 PHP 会重置数字键,字符串键会保留)

  • true → 保留原来的 数字键和字符串键

返回值

返回颠倒后的新数组

示例
php 复制代码
<?php
echo "<pre>";

$input  = [
  0 => 0,
  'name' => "yy",
  'age' => 2,
  7 => 3
];
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($input);
print_r($reversed);
print_r($preserved);
/* 
Array
(
    [0] => 0
    [name] => yy
    [age] => 2
    [7] => 3
)
Array
(
    [0] => 3
    [age] => 2
    [name] => yy
    [1] => 0
)
Array
(
    [7] => 3
    [age] => 2
    [name] => yy
    [0] => 0
)
*/
echo "</pre>";
in_array
作用

检查数组中是否存在某个值

语法
复制代码
in_array ( mixed $needle , array $haystack , bool $strict =false ): bool
参数
  • $needle 搜索值(如果是字符串,区分大小写)

  • $haystack 原函数

  • $strict

    • strict如果设置了 第三个参数**true** ,则**in_array()**函数还会检查 数组中元素的 类型
返回值
  • 如果needle数组中找到该元素, 则 返回true;

  • 否则返false

示例
php 复制代码
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {//true
  echo "Got Irix";
}
if (in_array("mac", $os)) {//false
  echo "Got mac";
}
array_keys
作用

返回数组中的所有索引值或子集作为一个新数组的元素集合

语法
php 复制代码
array_keys(array $array): array

array_keys(array $array, mixed $filter_value, bool $strict = false): array
参数

$array 原数组 不改变原数组

$filter_value 如果指定了该值,则仅返回包含该值的键。

$strict 确定搜索过程中是否应使用严格比较(===)。

返回值

默认返回一个包含所有键的数组array

**array_keys()**返回数组中的键,包括数字键和字符串键array

如果filter_value指定了参数 a,则仅返回该参数对应的键。否则,array返回参数 a 中的所有键。

示例
php 复制代码
<?php
echo "<pre>";
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
/* 
Array
(
    [0] => 0
    [1] => color
)
*/

$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

/* 

Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)
*/
$array = array(
  "color" => array("blue", "red", "green"),
  "size"  => array("small", "medium", "large")
);
print_r(array_keys($array));

/* 

Array
(
    [0] => color
    [1] => size
)
*/
echo "</pre>";
array_values
作用

返回数组中的所有值 array,并按数值索引数组

语法
php 复制代码
array_values(array $array): array
参数

$array 原函数

返回值

返回一个带索引的值数组(从0规律开始)

示例
php 复制代码
echo "<pre>";
$a = array(
  3 => 11,
  1 => 22,
  2 => 33,
);
$a[0] = 44;

print_r(array_values($a));
/* 

Array
(
    [0] => 11
    [1] => 22
    [2] => 33
    [3] => 44
)
*/
相关推荐
Q_Q5110082854 小时前
python+django/flask+vue的书城图书阅读器系统,亮点含目录章节pycharm
spring boot·python·django·flask·node.js·php
计算机科学与技术学习中4 小时前
文件上传漏洞
php
emma羊羊6 小时前
【PHP反序列化】css夺旗赛
开发语言·网络安全·php
Q_Q5110082857 小时前
python+django/flask的图书馆管理系统vue
spring boot·python·django·flask·node.js·php
Q_Q5110082857 小时前
python+django/flask的美食交流宣传系统vue
spring boot·python·pycharm·django·flask·node.js·php
m0_4955627818 小时前
Swift的逃逸闭包
服务器·php·swift
Elastic 中国社区官方博客18 小时前
Observability:适用于 PHP 的 OpenTelemetry:EDOT PHP 加入 OpenTelemetry 项目
大数据·开发语言·人工智能·elasticsearch·搜索引擎·全文检索·php
catchadmin1 天前
用 LaraDumps 高效调试 PHP 和 Laravel
php·laravel
刘恒1234567891 天前
PHP中对于(并发/并行)相关概念
php