php学习第三章:数组处理函数(一)
一、数组的键与值
1、array_keys($array); //获取数组所有或特定的键值对应的键名
1 //操作数组的键的函数 2 /** 3 * array_keys($array, $search_value); 返回数组的键名(或指定的键值对应的键名) 4 * @param array $array 要操作的数组 5 * @param mixed $search_value 要查找的键值(如果该参数存在,表示只返回该键值对应的键名) 6 * @return array 7 */ 8 $array = array('one'=>'苹果', 'two'=>'梨', 'three'=>'桃'); 9 var_dump(array_keys($array)); //输出:array 0 => string 'one' (length=3) 1 => string 'two' (length=3) 2 => string 'three' (length=5) 10 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 5 $arr2 = array('微笑'=>'img/face/smile.gif','哭泣'=>'img/face/cry.gif','生气'=>'img/face/angry.gif'); 6 var_dump(array_flip($arr2));
二、数组元素的添加与删除
1、array_pop($array); 删除数组的最后一个元素
1 /** 2 * array_pop($array) 删除数组的最后一个元素(出栈) 3 * 4 */ 5 $score = array('羽毛球','乒乓球','篮球','足球'); 6 var_dump(array_pop($score)); //输出:足球 7 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 12 */
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,……);通过键名来计算多个数组的差集
1 /** 2 * array_diff_key($array1, $array2) 使用键名比较两个数组的差集 3 * 4 */ 5 6 var_dump(array_diff_key($arrayF, $arrayG)); //输出: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 15 var_dump(each($info)); 16 reset($info); 17 /** 18 输出: 19 array 20 1 => string '李渊' (length=6) 21 'value' => string '李渊' (length=6) 22 0 => int 0 23 'key' => int 0 24 */ 25 while(list($key,$value) = each($info)){ 26 echo '第'.($key+1).'位皇帝:'.$value.';'; 27 } 28 //输出:第1位皇帝:李渊;第2位皇帝:李世民;第3位皇帝:李志;