数组相关的函数
排序函数:对数组元素进行排序
sort(),asort(),arsort(),ksort(),krsort()
shuffle()打乱数组;
指针函数:reset():重置指针,将指针回到首位
end():重置指针,将指针指到最后
next():指针下移,取得下一个元素的值
prev():指针上移,取得上一个元素的值
current():获取当前指针对应的元素值
key();获取当前指针对应的下标值
其他函数:count()获取数组长度
array_push():往数组中加入元素后面(数组会改变,引用传递)
array_pop():从数组中取出元素后面(数组会改变,引用传递)
array_shift():从数组中取出一个元素(前面)
array_unshift():从数组中加入一个元素(前面)
array_reverse():反转数组
array_keys():获取一个数组的所有下标,返回一个索引数组
array_values();获取一个数组的所有值,返回索引数组
算法
使用代码实现对应的数学模型,从而解决业务问题。
递推思想
//递推思想
//需求:规律1,1,2,3,5...
//求出指定位数对应的值
//已知条件:第一个和第二个数都为1,第三个开始为前两个数之和
$f[1] = 1;
$f[2] = 1;
$des = 15;
for($i=3;$i<=$des;$i++){
$f[$i] = $f[$i-1] + $f[$i-2];
}
echo '<pre>';
print_r($f);
递归思想
function res($n){
if($n==1 || $n==2) return 1;
//递归点:求n的值,与求n-1的值一样
return res($n-1) + res($n-2);
}
echo res(15); //610
冒泡排序
//数组排序:冒泡排序
$arr = array(1,4,2,9,7);
//1.想办法将最大的值放到最右边去
//2.想办法让下面可以每次找出最大值的代码
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr) -1;$j++){
//判断,两两相比
if($arr[$j] > $arr[$j+1]){
//左边比右边大:交换
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
echo '<pre>';
print_r($arr);
选择排序
//选择排序
$arr = array(1,4,2,8,5);
//1. 确定要交换多少次,一次只能找到一个最小的,需要找数组长度对应的次数
for($i=0;$i<count($arr);$i++){
//2.假设当第一个是最小的
$min =$i; //当前第一个数是最小的
//3. 拿当前最小的去比较剩余的
for($j=$i+1;$j<count($arr);$j++){
//4.比较当前元素与选定元素的最小的元素
if($arr[$j]<$arr[$min]){
$min =$j;
}
}
//交换当前选定的值与实际最小值的元素值
if($min != $i){
$temp =$arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] =$temp;
}
}
echo '<pre>';
print_r($arr);
插入排序
$arr = array(5,1,7,2,3);
for($i=1;$i<count($arr);$i++){
$temp = $arr[$i];
for($j=$i-1;$j>=0;$j--){
if($arr[$j] >$temp){
$arr[$j+1] = $arr[$j];
$arr[$j] =$temp;
}else{
break;
}
}
}
echo '<pre>';
print_r($arr);