栈与队列
栈和队列是添加与删除受限的一种数据结构,数据的增删只允许在一端进行。
- 栈:先进后出,后进先出。类似从羽毛球桶取羽毛球
- 队列:尾部进,头部出,先进先出。类似排队买票。
在栈尾部进行增删
$stack=[];
//array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度
echo array_push($stack,'php','html','css');
print_r($stack);
echo '<br>';
//array_pop() 函数删除数组中的最后一个元素,出栈 并返回被删除元素的值
array_pop($stack);
array_pop($stack);//连续删除两个元素
print_r($stack);
echo '<hr>';
在栈的头部进行增删
$stack2=[];
/*array_unshift() 向数组插入新元素。插入到数组的开头。返回数组中元素的个数。*/
echo array_unshift($stack2,'c','java','asp');
print_r($stack2);
echo '<br>';
//array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
array_shift($stack2);
print_r($stack2);
echo '<hr>';
echo '<hr>';
队列删除元素
$stack3=[];
echo array_push($stack3,10,20,30);
print_r($stack3);
echo '<br>';
array_shift($stack3);//删除10
array_shift($stack3);//删除20
echo array_unshift($stack3,'100','一千');
echo '<br>';
print_r($stack3);
数组键操作
1.拿到每一个键名
echo '键的操作<br>';
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男'];
$keys=[];
/* 拿到每一个键,这样也可以
echo key($arr);
next($arr);
echo key($arr);
*/
while (key($arr)){ //因为循环条件没有更新,所以不能用while(true)
$keys[]=key($arr);
next($arr);
}
print_r($keys);
2.array_keys 返回包含数组中所有键名的一个新数组
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男'];
print_r(array_keys($arr));
3.array_key_exists() 函数 检查键名 是否存在于数组中
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男'];
echo array_key_exists('name',$arr)?'存在':'不存在';
4.array_key_first查询数组中第一个键名
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男'];
echo array_key_first($arr);
5.array_key_last查询数组中最后一个键
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男'];
echo array_key_last($arr);
数组值的操作
1.用数组中每一个值,组成一个新数组
$arr2=[2=>3.14,8=>9.9,'name'=>'php',19=>9.9,20=>'html',50];
$key2=[];
print_r($arr2);
echo '<br>';
foreach($arr2 as $value)
{
$key2[]=$value;
}
print_r($key2);
echo '<br>';
2. array_values 返回包含数组中所有值组成的索引数组
$arr2=[2=>3.14,8=>9.9,'name'=>'php',19=>9.9,20=>'html',50];
print_r(array_values($arr2));
3.in_array 判断一个值是否存在数组中,返回布尔值
$arr2=[2=>3.14,8=>9.9,'name'=>'php',19=>9.9,20=>'html',50];
echo in_array('php',$arr2)?'存在':'不存在';
4.array_search判断一个值是否存在数组中,返回键名。如果不存在,返回布尔假
$arr2=[2=>3.14,8=>9.9,'name'=>'php',19=>9.9,20=>'html',50];
var_dump(array_search('php',$arr2));
echo '-----';
var_dump(array_search('php2',$arr2));
echo '<br>';
5.array_unique删除数组中重复的元素。
$arr2=[2=>3.14,8=>9.9,'name'=>'php',19=>9.9,20=>'html',50];
print_r(array_unique($arr2));
6.array_sum求数组中的数值的和
$arr3=[10,20,30,'123','php100'];
echo array_sum($arr3);
7.array_product求数组中的数值的乘积
$arr3=[10,20,30,'123','php100'];
echo array_product($arr3); //最后一个字符串被判定为0
数组排序
1.sort按值排序函数 键名也会发生变化
$arr=[30,2,80,16,26,'html','abc',62];
print_r($arr);
echo '<hr>sort按值排序函数<br>';
sort($arr); //默认按值的升序排。 字符串视为0, 键名也会发生变化
print_r($arr);
2.asort按值排序函数 键名不会发生变化
$arr2=[30,2,80,16,26,'html','abc',62];
asort($arr2); //默认按值的升序排 键名不会发生变化
print_r($arr2);
3.ksort按键升序来排序
$arr3=['d'=>30,'f'=>20,'a'=>15];
print_r($arr3);
echo '<hr>ksort按键升序来排序<br>';
ksort($arr3); //默认按键的升序排
print_r($arr3);
4.krsort按键降序来排序
$arr3=['d'=>30,'f'=>20,'a'=>15];
krsort($arr3); //默认按键的降序排
print_r($arr3);
5.通过用户自定义的比较函数对数组进行排序
//usort(array,myfunction); 可选。定义可调用比较函数的字符串。如果第一个参数小于等于或大于第二个参数,
//那么比较函数必须返回一个小于等于或大于 0 的整数。
$arr4=[26,51,2,95,120,64,82,12];
usort($arr4,function($a,$b){
return($a-$b);
});
print_r($arr4);
6.自然排序
$arr5=['img3.jpg','img5.jpg','img10.jpg','img8.jpg'];
print_r($arr5);
echo '<br>排序后是<br>';
natsort($arr5);
print_r($arr5);
数组查询与替换
1.array_slice从数组中取出一些元素
/* 从数组中取出一些元素 ,并返回 array_slice(array必需,start必需,length规定被返回数组的长度,preserve规定函数是保留键名还是重置键名,
true - 保留键名 false - 默认。重置键名) */
$arr=['id'=>10,'name'=>'段誉','age'=>26,'sex'=>'男','wife'=>'8'];
print_r (array_slice($arr,1,3));
2.array_splice() 函数从数组中移除选定的元素
/*
array_splice(array必需,start必需,length可选,array2可选)
array_splice() 函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组。
提示:如果函数没有移除任何元素(length=0),则将从 start 参数的位置插入被替换数组。
注释:不保留被替换数组中的键名。
*/
$arr2=[5,6,12,54,0,89,120,4,68];
//删除
print_r(array_splice($arr2,1,2)); //返回被删除的元素6,12
echo '<br>';
print_r($arr2);//重新打印
$arr2=[5,6,12,54,0,89,120,4,68];
$arr3=['h','a'];
print_r(array_splice($arr2,2,2,$arr3));//返回被删除的元素0,89
echo '<br>';
print_r($arr2);//重新打印
//新增
$arr4=[5,6,12];
$arr5=['bbb','ccc'];
array_splice($arr4,2,0,$arr5);
print_r($arr4);
3.array_combine数组合并
/*
array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。
注释:键名数组和键值数组的元素个数必须相同!
如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
*/
$keys=['type','host','datebasename','username','password'];
$values=['mysql','localhost','phpcn','root','root'];
print_r(array_combine($keys,$values));
数组过滤函数
1.array_filter回调函数返回true返回结果数组中
/*
array_filter(array必需,callbackfunction必需规定要使用的回调函数。);函数用回调函数过滤数组中的值。
该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。 False的不返回 。数组键名保持不变。
*/
//过滤掉数组中的非字符串
$arr=['50','abc',20,true,null,'hello'];
print_r(array_filter($arr,function($item){
return is_string($item);
}));
2.array_map() 函数将用户自定义函数作用到数组中的每个值上
/*
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
提示:您可以向函数输入一个或者多个数组。
*/
//将原数组中的对象元素 输出他的属性值。数组元素输出字符串,整型转化成字符串,其它的原样输出。
$arr2=[50,'abc',['bb','aa','cc'],(new class{public $name='张工';public $age=25;}),100,200];
$res=array_map(function($item){
switch(gettype($item)){
case 'object':
$item=get_object_vars($item);
$item=implode(',',$item) ;
break;
case 'array':
$item=implode(',',$item) ;
break;
case 'integer':
$item=(string)($item);
}
return $item;
},$arr2);
print_r($res);
关联数组和变量相互转换
1.extract() 使用数组键名作为变量名,使用数组键值作为变量值
$arr=['host'=>'localhost','dbname'=>'datebase','username'=>'root','password'=>'root'];
extract($arr);
echo $host;
2.compact()函数创建一个包含变量名和它们的值的数组
$id=10;
$name='张三';
$age='25';
$sex='male';
$res=compact('id','name','sex','age');
print_r($res);
总结
纪录的这些数组函数只是PHP数组函数中的一部分,学习一下有所印象,在使用到的时候再看笔记和手册吧!不难就是太多了!