php学习第三章:数组处理函数(一)

一、数组的键与值

1、array_keys($array);

获取数组所有或特定的键值对应的键名

  • 操作数组的键的函数
  1. /**
  2. * array_keys($array, $search_value); 返回数组的键名(或指定的键值对应的键名)
  3. * @param array $array 要操作的数组
  4. * @param mixed $search_value 要查找的键值(如果该参数存在,表示只返回该键值对应的键名)
  5. * @return array
  6. */
  7. $array = array('one'=>'苹果', 'two'=>'梨', 'three'=>'桃');
  8. var_dump(array_keys($array)); //输出:array 0 => string 'one' (length=3) 1 => string 'two' (length=3) 2 => string 'three' (length=5)
  9. var_dump(array_keys($array,'梨')); //输出:array 0 => string 'two' (length=3)
2、array_values($array);

获取数组所有的值

  1. /**
  2. * array_values() 获取一个数组的所有元素的值
  3. */
  4. $array2 = array('userName'=>'张三','SEX'=>'男','Age'=>25,'home'=>'湖北');
  5. var_dump(array_values($array2)); //输出:array 0 => string '张三' (length=6) 1 => string '男' (length=3) 2 => int25 3 => string'湖北' (length=6)
3、array_key_exists($key,$array)

判断某个数组是否存在某个键

  1. /**
  2. * array_key_exists($key, $array); 判断某个键是否存在于某个数组中
  3. * @param mixed $key 给定的key名
  4. * @param array $array 要搜索的数组
  5. * @retrun bool
  6. */
  7. $array1 = array('name'=>'端口网', 'url'=>'http://www.duankou.com', 'category'=>'社交网站');
  8. var_dump(array_key_exists('url',$array1)); //输出:boolean true
4、in_array($value,$array)

判断某个数组是否存在某个值

  1. /**
  2. * in_array($value,$array); //数组中是否存在某个值
  3. */
  4. $array1 = array('name'=>'端口网', 'url'=>'http://www.duankou.com', 'category'=>'社交网站');
  5. var_dump(in_array('端口网',$array1)); //输出:true
5、array_change_key_case($array, $lower_or_upper)

将数组的所有的键名变成大写或小写

  1. /**
  2. * array_change_key_case($array, $upper_or_lower); 把关联数组的键名都变成大写或小写(改变数组的键名的大小写)
  3. * @param array $array 要操作的数组
  4. * @param int $upper_or_lower 是改成大写或小写(有两个常量:CASE_LOWER(小写),CASE_UPPER(大写))
  5. */
  6. $array2 = array('userName'=>'张三','SEX'=>'男','Age'=>25,'home'=>'湖北');
  7. var_dump(array_change_key_case($array2, CASE_UPPER)); //输出:array 'USERNAME' => string '张三' (length=6) 'SEX' => string '男' (length=3) 'AGE' => int 25 'HOME' => string '湖北' (length=6)
  8. var_dump(array_change_key_case($array2, CASE_LOWER)); //输出:array 'username' => string '张三' (length=6) 'sex' => string '男' (length=3) 'age' => int 25 'home' => string '湖北' (length=6)
6、array_flip($array);
  1. /**
  2. * array_flip($array) 将数组的键与值互换
  3. */
  4. $arr2 = array('微笑'=>'img/face/smile.gif','哭泣'=>'img/face/cry.gif','生气'=>'img/face/angry.gif');
  5. var_dump(array_flip($arr2));

二、数组元素的添加与删除

1、array_pop($array); 删除数组的最后一个元素
  1. /**
  2. * array_pop($array) 删除数组的最后一个元素(出栈)
  3. */
  4. $score = array('羽毛球','乒乓球','篮球','足球');
  5. var_dump(array_pop($score)); //输出:足球
  6. var_dump($score); //输出:array 0 => string '羽毛球' (length=9) 1 => string '乒乓球' (length=9) 2 => string '篮球' (length=6)
2、array_push($array); 在数组的末尾添加数据
  1. /**
  2. * array_push($array,$val) 向数组的末尾添加一个或多个元素
  3. * @param array $array 要操作的数组
  4. * @param mixed $val 要添加的内容
  5. */
  6. $hello = array('hello world!','hello linux!');
  7. var_dump(array_push($hello,'hello php!')); //输出:3
  8. var_dump($hello);
  9. /**
  10. 输出:
  11. array
  12. 0 => string 'hello world!' (length=12)
  13. 1 => string 'hello linux!' (length=12)
  14. 2 => string 'hello php!' (length=10)
  15. */
3、array_shift($array); 在数组的开头添加元素
  1. /**
  2. * array_shift($array) 删除数组的第一个元素
  3. */
  4. var_dump(array_shift($hello)); //输出: string 'hello world!' (length=12)
  5. var_dump($hello);
  6. /**
  7. 输出:
  8. array
  9. 0 => string 'hello linux!' (length=12)
  10. 1 => string 'hello php!' (length=10)
  11. */
4、array_unshift();

删除数据最开头的元素

  1. /**
  2. * array_unshift($array, $val) 在数组的开头添加元素
  3. */
  4. $var = array('html','css');
  5. var_dump(array_unshift($var, 'javascript!')); //输出:3
  6. var_dump($var);
  7. /**
  8. 输出:
  9. array
  10. 0 => string 'javascript!' (length=11)
  11. 1 => string 'html' (length=4)
  12. 2 => string 'css' (length=3)
  13. */

四、交集与差集
有的同学可能忘记了差集与交集的概念。
交集即为两者的共同点,相当于共性;差集是我有的你没有,相当于我的个性;

如图:A与B的交集就是那团黑色的共同拥有的C,差集就是A-C那块

1、array_intersect($array1,$array2,$array3,……);

计算多个数组的交集,在此以两个数组为例

  1. /**
  2. * array_intersect($array1,$array2,$array3……) 计算两个或多个数组的交集
  3. *
  4. */
  5. $arrA = array('腾讯网','网易','搜狐');
  6. $arrB = array('facebook','端口网','人人网','腾讯网','网易');
  7. var_dump(array_intersect($arrA, $arrB)); //输出:array 0 => string '腾讯网' (length=9) 1 => string '网易' (length=6)
2、array_intersect_key($array1,$array2,$array3);

通过数组的键来计算多个数组的交集

  1. /**
  2. * array_intersect_key($array1,$array2,$array3,……) 用数组的键来计算两个或多个数组的交集
  3. */
  4. $arrC = array('腾讯'=>'www.qq.com','人人网'=>'www.renren.com','端口网'=>'www.duankou.com','facebook'=>'www.facebook.com');
  5. $arrD = array('腾讯'=>'www.pengyou.com','端口网'=>'webmain.duankou.com','百度'=>'www.baidu.com');
  6. var_dump(array_intersect_key($arrC,$arrD)); //输出:array '腾讯' => string 'www.qq.com' (length=10) '端口网' => string 'www.duankou.com' (length=15)
3、array_diff($array1,$array2,$array3,……);

计算多个数组的差集

  1. /**
  2. * array_diff($array1, $array2)求两个数组或多个数组的差集
  3. * @param array $array1
  4. * @param array $array2
  5. */
  6. $arrayF = array('one'=>'php','jsp','asp','.net');
  7. $arrayG = array('two'=>'php','java','three'=>'jsp','c','c++');
  8. var_dump(array_diff($arrayF, $arrayG));//输出:array 1 => string 'asp' (length=3) 2 => string '.net' (length=4)
4、array_diff_key($array1,$array2,$array3,……);

通过键名来计算多个数组的差集

5、 array_diff_key($array1, $array2)

使用键名比较两个数组的差集

  1. var_dump(array_diff_key($arrayF, $arrayG));
  2. //输出:php,因为数组$arrayF中只有one这个键,其他的键名都是索引,所以就是one所在的键值

五、数组指针

1、current($array);

输出当前数组所在元素

2、next($array);

让数组的指针向下移动一个单元

3、prev($array);

计数组的指针向上移动一个单元

4、reset($array);

将数组的指针指向第一个单元

5、end($array);

将数组的指针指向第后一个单元

6、key($array);

从关联数组中取得键名

7、list($var1,$var2,……)

将数组的值赋给一些变量

8、each($array)

返回数组中当前键值对,并将数组的指针向下移动一步

  1. //指针
  2. $info = array('李渊','李世民','李志');
  3. var_dump(current($info)); //输出:李渊
  4. next($info); //向下移动
  5. var_dump(current($info)); //输出:李世民
  6. prev($info); //向上移动
  7. var_dump(current($info)); //输出:李渊
  8. var_dump(end($info)); //输出:李志
  9. reset($info);
  10. list($first,$second,$third) = $info;
  11. var_dump('唐高祖:'.$first); //输出:唐高祖:李渊
  12. var_dump('唐太宗:'.$second); //输出:唐太宗:李世民
  13. var_dump('唐高宗:'.$third); //输出:唐高宗:李志
  14. var_dump(each($info));
  15. reset($info);
  16. /**
  17. 输出:
  18. array
  19. 1 => string '李渊' (length=6)
  20. 'value' => string '李渊' (length=6)
  21. 0 => int 0
  22. 'key' => int 0
  23. */
  24. while(list($key,$value) = each($info)){
  25. echo '第'.($key+1).'位皇帝:'.$value.';';
  26. }
  27. //输出:第1位皇帝:李渊;第2位皇帝:李世民;第3位皇帝:李志;