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
)
*/
相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082856 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe6 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5