PHP关于数组的详细讲解及测试

来源:互联网 发布:sql中删除重复数据 编辑:程序博客网 时间:2024/06/05 11:14
笔记第一章(如何创建数组,数组的输出和遍历数组)
<?php
header('Content-type":text/html;charset=utf8');
//创建一个数组?
$userNames=array('liangdongzhen','zhouhaoran','zhegnqiyang');
//如何将数组打印出来?
echo $userNames;//打印出来的并不是数组的内容,而是array,那么如何打印出来数组的内容呢?
echo $userNames[2];//那么就需要通过下标进行查看数组的内容,那么如何查看数组的全部内容呢?
print_r($userNames);//就可以使用print_r的输出方式来查看数组的全部内容
//方法二;创建一个数组 range包含指定数组 包含两种东西,一种叫键(key),一种叫值(value),(key)是自动生成的,默认从零开始每次加一,(value)是自己赋值的
$userages=range('1','10');//就创建了从1~10的数组。
$usseagew=range('a','z');//句创建了从a到z的一个数组,那么让我们来看一下。
print_r($userages);
print_r($usseagew);//如此这样就打印1~10,a~z的数组,并且key都是从0开始,依次排序。
//如何来当问数组的内容?
echo($usseagew[2]);//这样就把$useagew数组中的第三位打印出来了。
//如何修改数组的内容?
//如果想要修改数组的美容,只需要通过key位来重新赋值就行了。
echo $usseagew[1];//"原来的数组key位1的内容"
$usseagew[1]="修改的内容";
echo $usseagew[1];
print_r($usseagew);//"再次查看该数组的内容发现key位1的内容已经改变"那么如何查看一个数组里面的全部内容呢?我们可以通过for循环来输出一个数组的全部内容
for($i=0;$i<3;$i++){
echo $usseagew[$i];
}//通过一个for循环就看到了一个数组的全部内容,如果不知道一个数组有几个值呢?就无法使用这种方法,那么我们来认识一下新的函数(统计数组的个数)count();
echo count($usseagew);//这样就得到数组有26个,这样的话就可当作参数放进for循环,i<count($usseagew);就可以了。那么如果下标不是从零开始的就不能使用这种方法来遍历出数组的内容,那该怎么办呢?我们来认识一个新的函数foreach
foreach ($usseagew as $key => $value) {
echo $key.$value;
}//通过foreach来遍历数组可以直接输出key,和value,那么如果你不知道这个函数是不是数组怎么使用foreach来遍历数组呢?那么你就需要验证这个函数是不是数组用is_array();
if(is_array($usseagew)){
foreach ($usseagew as $key => $value) {
echo $key.$value;
}
//这样就可以了,如果是数组就遍历它并输出它如果不是数组就输出它,这样程序就不会报错,写程序要具有完整性,要相信自己程序没有bug,所以写程序的时候就要考虑全面
?>
笔记第二章(自定义键数组的创建和each()函数的使用)
<?php
header('Content-type:text/html;charset=utf-8');
//如何创建自定义的键(key)的数组,如果你不如声明它的键就是默认从0开始
$use=array('百度' =>'李彦宏', '淘宝'=>'马云','3721'=>'周鸿祎');//这样就定义了一个关联数组,就是自定义键数组,那么怎么查看数组的内容呢?
echo $use["百度"];//这样就输出了李彦宏,那么如何添加一个数据到这个数组里面呢?追加数组
$use['梁东振']='最帅';//这样我就添加了一个数据到$use数组当中;
print_r($use);//当然这种方法也可以直接创建数组,array关键字都可以不用
// $useeeeeeeee['张飞']=>19;
// print_r($useeeeeeeee);//通过打印可以发现这种方法可以添加数据还可以创建一个新的数组。
// 如何无法使用for循环将数组循环打印出来,只能通过foreach来遍历数组
foreach ($use as $key => $value) {
echo $key.'-----'.$value;
}//这样就返回了关联数组中的数据,那就没有其他方法来进行遍历关联数组呢?我们来认识一下each()和list()函数
//each的使用
//each----返回数组中当前的键/值并将数组指针向前移动一步
//这里有一个指针的概念,指针默认情况下指向第一个键值对就是'百度' =>'李彦宏'
//比如each($use)就是'百度' =>'李彦宏'
//each返回的是一个数组,意思是each将获得的第一个键值对包装成一个新的数组
each($use);
// echo $a;//发现返回的是array
// print_r($a);//Array ( [1] => 李彦宏 [value] => 李彦宏 [0] => 百度 [key] => 百度 ) ,那么指针并向前移动一步什么意思呢?
each($use);
$a=each($use);//到这里为止总共each了三次,也就是进行包装了三次,这个时候key的值和下标2返回的就是数组离的第三条数据
echo $a['key'];//这个时候输出的就是3721,当然也可以返回周鸿祎value
//那么怎么通过each把三条数据循环打印出来呢?
// $a=each ($use);
// echo $a[0].$a[1];//第一次循环出了第一条数据
// $a=each ($use);
// echo $a[0].$a[1];//这是就是第二条
//那怎么用循环来显示呢?
//两个感叹号!!表示真实的数据转换成布尔值 显示1 为假则不显示,这样的话就可以使用while循环语句来判断是否为真,循环体就是输出
// while(!!$a=each($use)){
// echo $a['key'].$a['value'].'<br/>';//循环体的作用就是如果条件为真则循环一次,循环一次each的指针就向前移动一次
// }
?>
笔记第三章(list()函数的使用和一些重要的方法使用)
<?php
header('Content-type:text/html;charset=utf-8');
//list()函数,把数组中的值赋给一些变量
$a = array('aaaa' ,'bbbb','cccc','dddd');
$b = array('梁东振' => 19,'郑琪洋'=>18,'孙振'=>17 );
print_r($a);//输出的是一个正常的数组
list($var1,$var2,$var3,$var4)=$a;//这句话就是将第一个数据赋给$var1,第二个数据赋给$var2................
echo $var1;//输出aaaa
echo $var2;//输出bbbb
echo $var3;//输出cccc
echo $var4;//输出dddd
// echo $var5;//这样就会报错
// 注意list()函数只认识下标为数字的数组,也就是说自定义的字符串key是无法使用list()来识别的,那么怎么解决这个问题呢?这就要配合each()来使用了
$v=each($b);//使用each()函数的到一个新数组,新数组的内容是Array ( [1] => aaaa [value] => aaaa [0] => 0 [key] => 0 ) 然后赋值给$V
print_r($v);//查看$v得到Array ( [1] => aaaa [value] => aaaa [0] => 0 [key] => 0 )
list($name,$age)=$v;//把each返回的值打包给$v后石油list()函数赋值给一些变量
echo $name;//打印出each得到的第一个数据的key
echo $age;//打印出each得到的第一个数据的value
//简写list($name,$age)=each($b);
//那么想在任意位置将指针调整回1呢?那么我们就要认识一个新的函数reset($a);就可以了,如果想直接想输出指针3只需要在,第二步的时候不进行输出,但实际上也是进行了所以在输出的时候就是输出指针3的数据
//确定唯一数组元素(移除数组中重复的值),就是删除数组中重复的元素 返回一个数组
echo "<br/>";
$c=array(15,16,15);
$d=array_unique($c);//进行删除重复的值,然后返回给一个新的数组$d
print_r($d);//查看新数组里面的元素结果为Array ( [0] => 15 [1] => 16 ) ,说明已经进行了改变
//如何交换数组中的键和值,那么就需要用到array_flip() 返回的也是数组
$e=array_flip($c);//进行交换键和值并且赋值给一个新的数组$e
print_r($e);//已经进行了改变,结果为Array ( [0] => 15 [1] => 16 ) Array ( [15] => 2 [16] => 1 )

?>
笔记第四章(如何数组的创建和遍历数组)
<?php
header('Content-type:text/html;charset=utf-8');
//数组里的数组(如何创建一个数组里的数组),其实不管是二维数组还是三维数组都是数组
$a=array(
1,
2,
3
);//这是一个一维数组,那么只需要把数组里面的某一个元素或者全部替换成另外一个数组,就变成了二维数组,也就是数组里的数组
$b=array(
array('苹果','新鲜',26.8),
array('香蕉','真品',15.6),
array('梨子','新进',12.1)
);
print_r($b);//就得到了一个新的数组
//那么如何取出第一条数组的第一个数据也就是苹果,当然我们通过凡哥问下标就可以完成
echo $b[0][0];//这样就把第一个数组的第一个数据打印出来了
//那么如何使用循环来遍历出这个二维数组里的数据,当然我们可以通过双重for循环来遍历出这个二维数组
//那么首先就要求出外层数组的长度我们就要使用count()函数来获得长度,然而同样也要求出内数组的长度count($b[$i])
for($i=0;$i<count($b);i++){
for($j=0;j<count($b[$i]);j++){
echo $b[$i][$j].'!';
}
echo <br/>;
}
//双面那个数组是没有键的,那么有键的该怎么办呢?
$c=array(
array('产品名'=>'苹果','新鲜度'=>'新鲜','价格'=>26.8),
array('产品名'=>'香蕉','新鲜度'=>'真品','价格'=>15.6),
array('产品名'=>'梨子','新鲜度'=>'新进','价格'=>12.1)
);
for($i=0;$i<count($b);i++){
foreach ($b[$i] as key=> $value) {
echo $value;
}
echo <br/>;
}
//第二种方法实现带有键的二维数组
for($i=0;$i<count($c);i++){
while(!!list($key,$value)=each($c[$i])){

echo $key...$value;
}
echo <br/>;
}




}
}
笔记第五章(如何对数组进行排序操作)
<?php
header('Content-type:text/html;charset=utf-8');
//如何对数组进行排序?没有进行排序前是按照key的顺序进行排序的,sort()这个函数是对数组本身进行排序
$fruit=array('banana','apple','orange');//创建一个数组
sort($fruit);//现在对这个数组进行排序
print_r($fruit);//现在再次查看这个数组,结果为Array ( [0] => apple [1] => banana [2] => orange ) ,明显已经进行了排序,发现是按照a,b,c进行排序。现在我们来进行测试数据是中文的数组
echo "<br/>";
$fruit1=array('梁东振','郑琪洋','阿丹');
print_r($fruit1);
echo "<br/>";
sort($fruit1);//现在进行排序
print_r($fruit1);//发信也可以进行改变,发现是按照a,o,e............进行排序,线面让我们来测试数据是数字的数组
echo"<br/>";
$fruit2=array(1,6,9,5,4,3,2,5);
sort($fruit2);
print_r($fruit2);//查看排序结果Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 5 [6] => 6 [7] => 9 ) ,按照值得大小也进行了排序。
/*下面来然我们仔细阅读一下sort()函数手册的参数部分,也就是说参数由两部分构成,一个是传入一个参数,一个是设置参数的比较类类型(比方说'2','12'进行比较,按照SORT_NUMERIC比较就是12>2,如果按照字符串来比较就是2>12)
格式----sort($数组名,SORT_REGULAR)
参数——---------------------------------
array
要排序的数组。
sort_flags
可选的第二个参数 sort_flags 可以用以下值改变排序的行为:

排序类型标记:
◦ SORT_REGULAR - 正常比较单元(不改变类型)
◦ SORT_NUMERIC - 单元被作为数字来比较
◦ SORT_STRING - 单元被作为字符串来比较
◦ SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
◦ SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。
◦ SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。

*/
//那么我们来思考一个问题这样排序的话是不是索引就跟着改变了?那么有时候自定义索引,或者关联数组的用法是key和value配合使用的,那么怎么解决这个问题呢?那么我们来认识一个新的函数asort(),就是不改变索引的key(键)进行顺序变动,也就是保留索引关系。
//我们再来认识一下ksort(),是对数组按照键key名排序,而非值
echo "<br/>";
$fruit3=array('b'=>'梁东振','a'=>'最帅');
ksort($fruit3);
print_r($fruit3);//发现结果已经变为Array ( [a] => 最帅 [b] => 梁东振 )
//那么我们来看前面学习的都是按照从大到小来排序的,那么怎样进项反向排序呢也就是从大到小,要实现这种情况只需要前面加上个"r",比如rsort krsort
//sort()按照顺序排序,asort()保留索引关系进行排序,ksort()按照key进行排序
//rsort()按照反向排序,rsort()保留索引关系
//那么如何随机显示数组里面的的几个数据(这点在我们PHP里面构造网页里面非常重要,比如把几张图片的地址随机放入一个数组当中然后,FOR循环出三张图片并且显示,那么打乱数组里面的数据就非常重要了)我们需要使用的是shuffle()
echo "<br/>";
$fruit4=array(9,8,7,6,5,4,3,2,1);
shuffle($fruit4);
for($i=0;$i<count($fruit4);$i++){
echo $fruit4[$i];
}//并且注意随机取出的三个数据是没有重复的
//还有一个是反向排序array_reverse,跟rsort不一样,array_reverse返回的是一个新数组,rsort是直接改变本数组不返回新数组,一般array_打头的都是返回一个新数组
?>
笔记第六章(对数组的一些操作,及数组指针的相关函数的介绍)
<?php
header('Content-type:text/html;charset=utf-8');
//最后我们再来介绍一些其他函数,添加函数
//array_unshift将数组来头插入一个或者多个单元
$arraytext=array('梁东振',);//创建一个数组
$a=array_unshift($arraytext, '张三');//插入一个数据到数组头
print_r($arraytext);//查看数组的内容Array ( [0] => 张三 [1] => 梁东振 )
echo $a;//注意这个函数的返回值返回的不是一个新的数组,而是插入数据后当前数组里面的数据的个数。
//那么有了在开头插入函数就有在结尾插入函数,这个函数就是array_push($函数,插入的内容)
array_push($arraytext, '李四');
print_r($arraytext);//结果显示Array ( [0] => 张三 [1] => 梁东振 [2] => 李四 )
//那么有了添加就会有删除,array_shift($函数)
array_shift($arraytext);//这个函数进行改变的
print_r($arraytext);//查看结果 Array ( [0] => 梁东振 [1] => 李四
// array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变
// 那么同学们也想到了,肯定会有删除结尾的元素那就是array_pop()
array_pop($arraytext);//进行删除结尾的操作
print_r($arraytext);//结果为Array ( [0] => 梁东振 ) ,注意:如果 array 为空(或者不是数组)将返回 NULL。 此外如果被调用不是一个数则会产生一个 Warning。
//下面我们来介绍一个比较重要的函数array_rand,从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键,也就是说从数组中返回n条数据的键(key)
$arraysuiji=array('梁东振','最帅','真的是啊');
$a=array_rand($arraysuiji,2);//如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值
print_r($a);//结果为Array ( [0] => 0 [1] => 2 ) ,下面来然我们来看一下这个函数的应用
// echo $arraysuiji[$a];//这样就把随机1条数据的值取出来了,那么我想要随机两个的话程序就报错了
echo $arraysuiji[$a[0]];
echo $arraysuiji[$a[1]];//这样就随机出了两个数据,并且没有重复的,为什么?别问我,我也不知道为什么
//关于数组指针的操作
//默认情况下指针是指向第一个数据的,current($arraytext),就是获取指针的当前元素
echo "<br/>";
echo current($arraytext);//这样就打印出了$arraytext的指针位置的值,但是指针并没有向前移动,那么怎么向前移动呢?next()函数就是指针前进移动一位并获取当前指针位置元素
echo "<br/>";
echo next($arraytext);//这样就获取到了第二个元素
//prev($函数);将函数的指针倒回一位
//统计数组的个数 sizeof($函数)和count($函数) 都可以
//统计数组下标值得个数array_count_values 统计数组中所有值出现的次数
echo "<br/>";
$c=array(1,2,5,2,6,3,6,5,5,5,4,5,5,4,4,5,52,2,5,5,5);
print_r(array_count_values($c));//结果Array ( [1] => 1 [2] => 3 [5] => 10 [6] => 2 [3] => 1 [4] => 3 [52] => 1 ) ,一般用于做统计使用也是会经常用到
//如何将数组里面的键(key)转换成变量呢?这样直接通过调用变量就可以对数组里面的每一个数据进行操作了,这个函数就是extract($函数);
$fruits=array('a'=>'banana','b'=>'apple','c'=>"orange");
extract($fruits);
echo $a;//这样就通过输出$a就打印出了a(key)的值为banana;

?>
1 0