数组定义
$arr = array("a","b","c");
$arr1 = array("a"=>1,"b"=>2,5,10=>100); //关联数组
$arr2 = array();
$arr2[] = "15";
$arr2[] = 15;
$arr3[] =100;
$arr3[] =10;
$arr3[] ='中国梦';
echo $arr3[0];
下标如果有重复,后面的会覆盖前面的
数组单元的顺序是由其放入顺序决定而不是下标
数组分类
按键值关系划分
索引数组 关联数组 混合数组
按数组的维数划分
一维数组 多维数组
数组的基本使用
// 求一个一维数组的平均值
$a = array(1,11,12,13,100);
$n =count($a);
$sum =0;
for ($i=0; $i <$n ; $i++) {
$sum+=$a[$i];
}
echo "一维数组的平均值是".$sum/$n."<br/>";
// 求一个二维数组的平均值
$a1 = array(
array(10,11,100),
array(10,101,100),
array(100,300,100,400),
);
$len = count($a1);
$sum = 0;
$c = 0;
for ($i=0; $i < $len; $i++) {
$tempconut = count($a1[$i]);
for ($k=0; $k < $tempconut; $k++) {
$sum += $a1[$i][$k];
$c++;
}
}
echo "二维数组的平均值为".$sum/$c."<br/>";
// 求一个一维数组的最大值
$a3 = array(10,100,1,300);
$count = count($a3);
$max = $a3[0] ;
for ($i=0; $i < $count ; $i++) {
if($max < $a3[$i]){
$max = $a3[$i];
}
}
echo "一维数组的最大值是".$max."<br>";
// 求一个二维数组的最大值
$a4 = array(
array(100,0,10,999),
array(100000000000000,100,10,9999),
array(10,55,10000,999999999),
);
$max = $a4[0][0];
for ($i=0; $i < count($a4); $i++) {
for ($k=0; $k < count($a4[$i]) ; $k++) {
if($max < $a4[$i][$k]){
$max = $a4[$i][$k];
}
}
}
echo "二维数组的最大值是".$max."<br/>";
//交换一维数组的最大值和最小值
$arr5 = array(100,1,999,1024,888);
$max_index = -1;
$min_index = -1;
$max = $arr5[0];
$min = $arr5[0];
for ($i=0; $i < count($arr5); $i++) {
if($max < $arr5[$i]){
$max_index = $i;//最大值
$max = $arr5[$i];
}
if($min > $arr5[$i]){
$min_index = $i;//最小值
$min = $arr5[$i];
}
}
$temp = $arr5[$max_index];
$arr5[$max_index] = $arr5[$min_index];
$arr5[$min_index] = $temp;
echo "最大值索引是".$max_index."最小值索引是".$min_index."<br/>";
echo "一维数组最大值和最小值交换后的结果为".implode(" ",$arr5)."<br>";
数组的遍历
$arr = array(1,100,35);
foreach ($arr as $key => $value) {
echo $value;
}
数组指针操作
//数组指针操作
$arr = array(10,200,500);
do{
echo current($arr)."<br>";
}while(next($arr));
//指针默认在第一个元素处
$arr2 = array(100,88,1989,10,30);
foreach ($arr2 as $key => $value) {
}
$key = key($arr2);
$value = current($arr2);
//遍历之后指针的位置
var_dump($key); //NULL
var_dump($value); //false
for+next遍历数组
$arr3 = array(1=>100,"aa"=>900,"中国梦");
for ($i=0; $i <count($arr3) ; $i++) {
$key = key($arr3);
$value = current($arr3);
next($arr3);
echo "key = $key,value = $value<br/>";
}
while+each()+list()遍历数组
$arr5 = array(100,900,500);
while (list($key,$value) = each($arr5)) {
echo "key = $key,value = $value <br/>";
}
foreach循环细节
foreach值传递不改变原数组
$arr6 = array(1,100,888,777);
foreach ($arr6 as $key => $value) {
$value *=2;
echo "$value <br>";
}
print_r($arr6); //原数组不变
foreach引用传递改变原数组
$arr7 = array(100,200,300);
foreach ($arr7 as $key => &$value) {
$value *=2;
}
print_r($arr7); //原数组发生了变化
数组排序
正序 sort() asort()
sort()不保留键值关系,asort()保留键值关系
rsort() arsort() 倒序
ksort() 对数组按照键名排序
krsort() 对数组按照键名逆向排序
usort() 使用用户自定义的比较函数对数组中的值进行排序
shuffle() 将数组打乱
数组算法
冒泡算法 选择算法 二分算法
二分算法
<?php
header("Content-type: text/html; charset=utf-8");
$a = array(1,3,6,8,10,81,75,121,413,451,818,9089,10000);
/**
$arr 传入的数组
$s 要查找的值
$begin 开始位置
$end 结束位置
return 找到返回下标,找不到返回false
**/
function search($arr,$s,$begin,$end){
if($begin > $end){
return false;
}
$mid = floor(($begin+$end)/2);
if($arr[$mid]==$s){
return $mid;
}else if($arr[$mid] < $s){ //在左侧
$res = search($arr,$s,$mid+1,$end);
}else { //在右侧
$res = search($arr,$s,$begin,$mid-1);
}
return $res;
}
$index = search($a,1,0,count($a)-1);
var_dump($index);
?>