目录
1.数字索引数组
<?php
//初始化数组
$arr1 = array(1,2,3);
$arr2 = [1,2,3,4];
$arr2[1] = "asd";//改变数组的值
$arr3 = $arr1; //赋值
//创建特殊数组
$arr4 = range(1,5,2);//$arr4 = range('a','z');
2.循环访问数组
<?php
$arr = range(1,10);
foreach($arr as $i)
{
echo $i . PHP_EOL;
}
$arr1 = array("a"=>2,"s"=>3);
$arr1["as"] = 4;
foreach ($arr1 as $key=>$value)
{
echo $key . " ". $value . PHP_EOL;
}
3.PHP数组操作符
操作符 | 名称 | 示例 | 結 果 |
---|---|---|---|
+ | 联合 | $a + $b | $3和$1^的联合。数组$b将被附加到$a中,但是任何关键字 冲突的元素将不会被添加 |
*=* | 等价 | $a = $b | 如果$3和$1)包含相同元素,返回true |
*==* | 恒等 | $a == $b | 如果$3和$。包含相同顺序和类型的元素,返回true |
*!=* | 不等价 | $a != $b | 如果$3和$1?不包含相同元素,返回true |
*O* | 不等价 | $a o $b | 与!=相同 |
*!=* | 不恒等 | $a != Sb | 如果$3和$1)不包含相同顺序类型的元素,返回true |
4.多维数组
<?php
//二维数组
$arr = array(
array(1,2,3),
array(1,2,3),
array(1,2,3)
);
for($i = 0;$i<count($arr[0]);$i++)//count($arr[0])计算行数
{
for($j = 0;$j<count($arr[0]);$j++)
{
echo $arr[$i][$j] . PHP_EOL;
}
}
$arr1 = array(
array("asd"=>1,"asdf"=>2,"asdfg"=>3),
array("asd"=>1,"asdf"=>2,"asdfg"=>3),
array("asd"=>1,"asdf"=>2,"asdfg"=>3)
);
echo $arr1[0]["asd"];
//三维数组类似
5.数组排序
1.一维数组排序
1.sort:(对值进行排序)
1.sort()函数是区分字母大小写的。所有的大写字母都在小写字母的前面。所以 'A'小于’Z',而'Z'小于’a'。
2.该函数的第二个参数是可选的。这个可选参数值包括SORT_REGULAR (默认值)、 SORT_NUMERIC、SORT_STRING、SORT_LOCALE_STRING、SORT_NATURAL、 SORT_FLAG_CASEo
3.参数值SORT_LOCALE_STRING表示根据当前系统locale按字符串形式对数组进行排序,不同locale的排序结果不同。
4.参数值SORT_NATURAL将产生一个自然排序顺序,使用natsort()函数也可以获得相 同排序效果。自然排序顺序类似于组合字符串和数字排序,排序结果更符合人的直观感觉。 例如,对字符串'filel' 'filelO' ' file2'进行字符串排序,其结果是’filel* 4 file2*和 'filelO',这样的结果更符合人类直观感觉。
参数值 SORT_FLAG_CASE 是 SORT_STRING 或 SORT_NATURAL 的组合,可以使用 位操作符&来组合选项,如下代码所示:
sort($products, SORT_STRING & SORT_FLAG_CASE);
以上代码将忽略大小写进行排序,因此’a'和’A'是等价的。
<?php
$arr = array('aa','ac','ab');
sort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i)
{
echo $i . PHP_EOL;
}
2.asort()(对键进行排序)
<?php
$arr = array('aa'=>2,'ac'=>1,'ab'=>3);
asort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i=>$j)
{
echo $i . $j. PHP_EOL;
}
3.ksort()对键进行排序
<?php
$arr = array('ca'=>2,'ad'=>1,'ab'=>3);
ksort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i=>$j)
{
echo $i . $j. PHP_EOL;
}
rsort()、arsort()和 krsort(),反向排序(和上面数组一一对应,但是排序结果刚好相反)
2.多维数组排序
1.array_multisort()
<?php
$arr1 = array(
array("csd"=>1,"asdf"=>2,"asdfg"=>3),
array("asd"=>1,"asdf"=>2,"asdfg"=>3),
array("dsd"=>1,"asdf"=>2,"asdfg"=>3)
);
array_multisort($arr1,SORT_DESC);
//SORT_ASC:升序
//SORT_DESC相反
foreach ($arr1[0] as $a=>$y)
{
echo $a . $y;
}
2.用户自定义排序
<?php
$arr1 = array(
array(1,2,3),
array(2,3,1),
array(3,1,2)
);
function compare($x,$y)
{
if($x[0]<$y[0])
{
return 1;
}else if($x[0]==$y[0])
{
return 0;
}
else
{
return -1;
}
}
usort($arr1,'compare');//改变数组排序的顺序
foreach ($arr1[0] as $x)
{
echo $x .PHP_EOL;
}
3.shuffle()随机排序,可以用来生成动态页面
<?php
$picture = array('picture/1.jpg','picture/2.jpg','picture/3.jpg');
shuffle($picture);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP cookie</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<div align="center">
<table style="width: 100%; border: 0">
<tr>
<?php
for($i = 1;$i<=3;$i++)
{
echo "<td style=\"width: 33% ; text-align: center\">
<img style='width: 100px ; width: 100px' src=\"". $picture[$i-1] ."\"/>
</td>";
}
?>
</tr>
</table>
</div>
</body>
</html>
3.数组指针
<?php
$number = range(1,10,-1);
echo current($number) . PHP_EOL;//返回当前指针所指向的元素
echo next($number) . PHP_EOL;//指针向后移一位,并返回移动一位后的元素
echo prev($number) . PHP_EOL; //指针向前移一位,并返回移动一位后的元素
echo end($number) . PHP_EOL; //指针指向最后一个,并返回最后一个元素
echo reset($number) . PHP_EOL;//指针指向第一个,并返回第一个元素
实例:
逆序输出数组的内容:
<?php
$number = range(1,10);
$arr = end($number);
while ($arr)
{
echo $arr .PHP_EOL;
$arr = prev($number);
}
<?php
$arr = [1,1,2,3,1,2,3];
$x1 = count($arr);
$arr2 = sizeof($arr);
//以上两个函数功能相同,都是计算数组中元素的个数,如果是空数组,则返回0
$arr3 = array_count_values($arr);
echo $arr3[2];//[x],$arr[x],就是x在数组中出现的次数
4.其他
1.将数组转换为字符串(implode)
<?php
//implode函数将数组用第一个函数连接起来
$arr = ["dd","asdi"];
$arr = implode(',',$arr);
echo $arr;
2.将字符串转换为数组(explode)
<?php
$string = 'ajsWdh@sdkfj';
$email = explode('@',$string);
echo $email[0] . " " .$email[1];
//explode:将$string在@的地方分割为两个字符串
3.array_push和array_pop()
4.
对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract() 将它们转换成一系列的标量变量
extract( $arr [,** int extract_type] [, string prefix]);
extract_type参数的可用值
类 型 | 意 义 |
---|---|
EXTR_OVERWRITE | 当发生冲突时覆盖已有变量 |
EXTR_SK1P | 当发生冲突时跳过一个元素 |
EXTR_PREFIX_SAME | 当发生冲突时创建一个名为Sprefix key的变量。必须提供prefix参数 |
EXTR_PREFIX_ALL | 在所有变量名称之前加上由prefix参数的指定值°必须提供prefix参数 |
EXTR_PREFIX_INVALID | 使用指定的prefix在可能无效的变量名称前加上前缀(例如,数字变量名 称)。必须提供prefix参数 |
EXTR_IF_EXISTS | 只提取已经存在的变量(即用数组中的值覆盖已有的变量值)。这个参数对 于数组到变量的转换非常有用,例如,$_REQUEST到一个有效的变量集合 的转换 |
EXTR_PREFIX_IF_EXISTS | 只有在不带前缀的变量已经存在的情况下,创建带有前缀的变量。这个值 是在4.2.0版本中新增加的 |
EXTR_REFS | 以引用方式提取变量 |
列:
<?php
$arr = array('key1'=>'d','key2'=>'ads');
extract($arr);
echo "$key1 $key2";