ROOT
ROOT
文章目录
  1. PHP 数组有两种: 数字索引数组和联合索引数组
    1. 数字索引数组定义:
    2. 联合索引数组定义:
  2. 一维数组的遍历
    1. 遍历数字索引数组:
    2. 遍历联合索引数组:
  3. 数组的排序
  4. 字符串与数组的转换
  5. 向数组中添加 / 删除元素
  6. 查询数组中的元素
  7. 统计数组中元素个数
  8. 删除数组中重复元素
  9. 调换数组中的键名和元素值
  10. 数组的序列化
  11. 数组到合并与联合
  12. 清理数组

PHP 数组

PHP 数组有两种: 数字索引数组和联合索引数组

数字索引数组定义:

$a = array('语文', '数学', '英语', '物理', '化学', '生物');
print_r($a);

输出:

Array([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物)

联合索引数组定义:

$b = array('语文'=>150, '数学'=>150, '英语'=>150, '物理'=>120, '化学'=>108, '生物'=>72);
print_r($b);

输出:

Array ([语文] => 150 [数学] => 150 [英语] => 150 [物理] => 120 [化学] => 108 [生物] => 72 )

一维数组的遍历

遍历数字索引数组:

for($i=0; $i < 6; ++$i)
        echo $a[$i]." ";

输出

语文 数学 英语 物理 化学 生物

遍历联合索引数组:

foreach($b as $v) // 遍历元素值到 V 变量中
   echo $v . " ";
   echo "<br>";
foreach($b as $k => $v) // 分别遍历键值和元素值到 $k 和 $V 中
   echo "$k:$v" . " ";
echo "<br>";
reset($b);               // foreach 遍历后,必须要 reset 重置为开头元素给 while 遍历
while($e = each($b))     // 两个键值: key, value
   echo $e['key'] . $e['value'] . " ";
echo "<br>";
reset($b);
while(list($k, $v) = each($b)) // 用 list 来分别获取键值和元素值 list($key, $value)
   echo "$k:$v" . " ";
echo "<br>";

输出:

150 150 150 120 108 72 
语文:150 数学:150 英语:150 物理:120 化学:108 生物:72 
语文 150 数学 150 英语 150 物理 120 化学 108 生物 72 
语文:150 数学:150 英语:150 物理:120 化学:108 生物:72

数组的排序

排序涉及 sort(), asort(), ksort(), arsort(), krsort()

sort()是默认排序 (针对数字索引数组,如果是联合索引数组则会丢失键值,转换为数字索引数组),asort() 根据元素值升序排序,ksort()根据键值升序排序,arsort()krsort() 为对应的降序排序。

sort($a);    // 升序排列 (针对数字索引数组) 元素值
print_r($a);
echo "<br>";
asort($b);    // 升序排列元素值
print_r($b);
echo "<br>";
ksort($b);    // 升序排列键值
print_r($b);
echo "<br>";

输出:

Array ([0] => 化学 [1] => 数学 [2] => 物理 [3] => 生物 [4] => 英语 [5] => 语文 )
Array ([生物] => 72 [化学] => 108 [物理] => 120 [英语] => 150 [数学] => 150 [语文] => 150 )
Array ([化学] => 108 [数学] => 150 [物理] => 120 [生物] => 72 [英语] => 150 [语文] => 150 )

usort()可以对二维数组进行排序,需要写个比较函数,usort($arr, ‘compare’);

function compare($a, $b)
{
    return $a['value'] < $b['value']; // 将根据二维数组中的 value 键值对应的元素值进行升序
}

字符串与数组的转换

采用 explode()implode()函数,explode()implode() 分别为切分 (返回数组) 和组合 (合并数组) 字符串函数,

 $str = implode(',',$a);
 echo $str;
 echo "<br>";
 $a = explode(',',$str);
 print_r($a);
 echo "<br>";

输出:

语文, 数学, 英语, 物理, 化学, 生物
Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 )

向数组中添加 / 删除元素

采用array_push($arr, $val1, $val2,), array_unshift($arr, $val1, $val2, ...), array_pop($arr), array_shift($arr),作用分别是:向数组末尾添加元素,向数组开头添加元素,向数组结尾删除元素,向数组开头删除元素。

echo " 长度:" . array_push($a, 'C 语言','离散数学') . "<br>";    // 尾部添加元素,返回数组元素个数
print_r($a);
echo "<br>";
echo " 长度:" . array_unshift($a,'体育') . "<br>"; // 头部添加元素,返回元素个数
print_r($a);
echo "<br>";
echo " 删除了:" . array_pop($a) . "<br>"; // 尾部删除,返回删除的元素
print_r($a);
echo "<br>";
echo " 删除了:" . array_shift($a) . "<br>"; // 头部删除,返回删除到元素
print_r($a);
echo "<br>";

输出:

长度:8
Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 [6] => C 语言 [7] => 离散数学 )
长度:9
Array ([0] => 体育 [1] => 语文 [2] => 数学 [3] => 英语 [4] => 物理 [5] => 化学 [6] => 生物 [7] => C 语言 [8] => 离散数学 )
删除了: 离散数学
Array ([0] => 体育 [1] => 语文 [2] => 数学 [3] => 英语 [4] => 物理 [5] => 化学 [6] => 生物 [7] => C 语言 )
删除了: 体育
Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 [6] => C 语言 )

查询数组中的元素

采用 in_array(), array_key_exists(), array_search(), array_keys(), array_values() 函数。

in_array($value, $arr)判断 $value(元素值) 值是否在数组中

array_key_exists($key, $arr)判断数组中是否有名为 $key 的键名,针对联合索引数组

array_search($value, $arr)判断数组中是否有值为$value,针对联合索引数组

array_keys($arr)返回一个将(联合索引数组)键名作为元素的数字索引数组

array_values($arr)返回一个(联合索引数组)元素值作为元素的数字索引数组

if(in_array('语文', $a))    // 判断元素值是否在数组中
    echo "yes<br>";
else
    echo "no<br>";
if(array_key_exists('语文', $b)) // 判断键名是否在数组(联合索引数组)中
    echo "yes<br>";
else
    echo "no<br>";
if(array_search('72', $b))    // 判断元素值是否在数组(联合索引数组)中
    echo "yes<br>";
else
    echo "no<br>";
$k = array_keys($b); // 分离键名(联合索引数组)
print_r($k);
echo "<br>";
$v = array_values($b);     // 分离元素值(联合索引数组)
print_r($v);
echo "<br>"

输出:

yes
yes
yes
Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 )
Array ([0] => 150 [1] => 150 [2] => 150 [3] => 120 [4] => 108 [5] => 72 )

统计数组中元素个数

采用 count($arr) 函数可以返回数组元素个数,array_count_values($arr),返回一个数组。

echo count($a) . " 个元素 <br>"; // 返回元素值个数
echo count($b) . " 个元素 <br>";    // 同上
$c = array_count_values($b);    // 返回一个统计数组元素值的个数的数组
print_r($c);
echo "<br>";

输出:

6 个元素
6 个元素
Array ([150] => 3 [120] => 1 [108] => 1 [72] => 1 )

删除数组中重复元素

采用 array_unique($arr) 删除数组中重复的元素值(以元素值为准),返回删除重复元素后的数组。

$c = array('语文', '数学', '英语', '物理', '化学', '生物', '语文', '语文');
print_r(array_unique($c)); // 返回删除重复元素后的数组。
echo "<br>";
print_r($c);
echo "<br>";

输出:

Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 )
Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 [6] => 语文 [7] => 语文 )

调换数组中的键名和元素值

采用 array_flip($arr) 函数返回调换数组中的键名和元素值后的数组。

print_r(array_flip($b));    // 返回调换数组中的键名和元素值后的数组
echo "<br>";
print_r($b);

输出:

Array ([150] => 英语 [120] => 物理 [108] => 化学 [72] => 生物 )
Array ([语文] => 150 [数学] => 150 [英语] => 150 [物理] => 120 [化学] => 108 [生物] => 72 )

数组的序列化

数组的序列化就是将数组的数据转换为字符串,与之对应的操作就是反序列化。

采用 serialize($arr) 返回字符串和 unserialize($str)返回数组的函数。

$str=serialize($b);
echo $str . "<br>";
print_r(unserialize($str));

输出:

a:6:{s:6:" 语文 ";i:150;s:6:" 数学 ";i:150;s:6:" 英语 ";i:150;s:6:" 物理 ";i:120;s:6:" 化学 ";i:108;s:6:" 生物 ";i:72;}
Array ([语文] => 150 [数学] => 150 [英语] => 150 [物理] => 120 [化学] => 108 [生物] => 72 )

数组到合并与联合

数组的合并是多个数组的元素值合并为一个数组,而联合是一个数组作为键名,一个数组作为元素值进行合并。

array_merge($arr1, $arr2, ...)合并,array_combine($arr1, $arr2)联合(要求 $arr1$arr2的元素个数一致)。

$a = array('语文', '数学', '英语', '物理', '化学', '生物');
$c = array(150, 150, 150, 120, 108, 72);
print_r(array_merge($a, $c)); // 两数组合并
echo "<br>";
print_r(array_combine($a, $c)); // 两数组联合

输出:

Array ([0] => 语文 [1] => 数学 [2] => 英语 [3] => 物理 [4] => 化学 [5] => 生物 [6] => 150 [7] => 150 [8] => 150 [9] => 120 [10] => 108 [11] => 72 )
Array ([语文] => 150 [数学] => 150 [英语] => 150 [物理] => 120 [化学] => 108 [生物] => 72 )

清理数组

unset($arr)清理数组,完全释放资源。

unset($a);
unset($b);
支持一下
扫一扫,支持Netcan
  • 微信扫一扫
  • 支付宝扫一扫