php基础之数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenchenweb/article/details/79934119

数组定义

$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);
?>







阅读更多
换一批

没有更多推荐了,返回首页