php学习第三章:数组处理函数(二)
六、数据的查找、替换
1、in_array($value,$array);判断$value是否存在于$array这个数组中,如果存在返回true,如果不存在返回false
2、array_search($value,$array);意义与in_array一样,只是当存在时返回该值对应的键值
3、array_replace($array1,$array2);对数组$array2替换$array1对应的值
1 $ar1 = array('151','158','159','134','135','136','137','138','139'); 2 $phone = '18956895623'; 3 $number = substr($phone,0,3); 4 if(!in_array($number, $ar1)) 5 { 6 echo '非移动手机号!'; 7 } 8 //输出:非移动手机号 9 10 var_dump(array_search($number,$ar1)); //输出false 11 $phone1 = '13856897856'; 12 $num = substr($phone1,0,3); 13 var_dump(array_search($num,$ar1)); //输出:7 14 15 $ar2 = array('永远','当下','今天'); 16 $ar3 = array('昨天','明天'); 17 var_dump(array_replace($ar2, $ar3)); 18 /** 19 输出:array 20 0 => string '昨天' (length=6) 21 1 => string '明天' (length=6) 22 2 => string '今天' (length=6) 23 */
4、array_unique($array)去掉数组的重复的值
七、数组的填充、合并与拆分
1、array_fill($start,$length,$value); //用$value填充一个数组,填充的位置从$start开始,填充$length个长度
1 /** 2 * array_fill($startIndex, $length, $value) 用指定的值填充数组 3 * @param int $startIndex 填充的起始位置的索引值 4 * @param int $length 填充的长度 5 * @param mixed $value 用来填充的值 6 * @return array 7 */ 8 var_dump(array_fill(2,5,'钓鱼岛是中国的!')); 9 /** 10 输出: 11 array 12 2 => string '钓鱼岛是中国的!' (length=22) 13 3 => string '钓鱼岛是中国的!' (length=22) 14 4 => string '钓鱼岛是中国的!' (length=22) 15 5 => string '钓鱼岛是中国的!' (length=22) 16 6 => string '钓鱼岛是中国的!' (length=22) 17 */ 18
2、array_fill_keys(array $keys,$value); //用指定的键与值来填充数组
1 /** 2 * array_fill_keys(array $keys,$values) 用指定的键和值来填充一个数组 3 * @param array $keys 用来填充的数组的键名 4 * @param mixed $values 用来填充的值 5 * @return array 6 */ 7 var_dump(array_fill_keys(array('奥巴巴','卡梅伦','普京','奥朗德','中国人'),'钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!')); 8 /** 9 array 10 '奥巴巴' => string '钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!' (length=75) 11 '卡梅伦' => string '钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!' (length=75) 12 '普京' => string '钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!' (length=75) 13 '奥朗德' => string '钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!' (length=75) 14 '中国人' => string '钓鱼岛自古以来都是中国的领土,你丫的都闭嘴!!!!' (length=75) 15 */
3、array_pad($array,$padSize,$padValue); //用指定的值来填充一个数组,填充到指定长度
1 /** 2 * array_pad($array,$padSize,$padValue) 把一个数组用指定值填充到指定长度 3 * @param array $array 被操作的数组 4 * @param int $padSize 填充之后的长度 5 * @param string $padValue 用来填补的内容 6 */ 7 var_dump(array_pad(array('三国演义','水浒传'),5,'中国经典')); 8 9 /** 10 输出: 11 array 12 0 => string '三国演义' (length=12) 13 1 => string '水浒传' (length=9) 14 2 => string '中国经典' (length=12) 15 3 => string '中国经典' (length=12) 16 4 => string '中国经典' (length=12) 17 */
4、array_combine(array $keys,array $values);将一个数组作为键,一个数组作为值合并成一个新的数组
1 /** 2 * array_combine(array $keys, array $values); 3 * 将一组数组作为键名,另一组数组作为键值,合并为一个新的数组 4 * @param array $keys 作为键名的数组 5 * @param array $values 作为键值的数组 6 * @return array 7 */ 8 $keys = array('name','sex','url'); 9 $values = array('许三多','男','http://xusanduo.test.com'); 10 var_dump(array_combine($keys, $values)); //输出:array 'name' => string '许三多' (length=9) 'sex' => string '男' (length=3) 'url' => string 'http://xusanduo.test.com' (length=24) 11
5、array_merge($array1,$array2,……); 把多个数组合并为一个数组
1 /** 2 * array_merge($array1, $array2,$array3) 将两个或多个数组合并为一个数组 3 * @param array $array1 4 * @param array $array2 5 * @return array 6 */ 7 $arrayA = array('username'=>'秦琼', 'nickname'=>'神拳太保小孟尝','hometown'=>'山东历城'); 8 $arrayB = array('Knighthood'=>'护国公','honor'=>'凌烟阁二十四功臣之一'); 9 var_dump(array_merge($arrayA, $arrayB)); 10 /*输出: 11 array 12 'username' => string '秦琼' (length=6) 13 'nickname' => string '神拳太保小孟尝' (length=21) 14 'hometown' => string '山东历城' (length=12) 15 'Knighthood' => string '护国公' (length=9) 16 'honor' => string '凌烟阁二十四功臣之一' (length=30) 17 */
6、array_slice($array,$start,$length); 将一个数组从某个位置开始截取$length个长度形成一个新的数组
1 /** 2 * array_slice($array,$start,$length); 3 * @param array $array 要操作的数组 4 * @param int $start 开始位置 5 * @param int $length 要截取的长度 6 * @return array 7 */
$arr = array('魏征','秦琼','程咬金','单雄信','王伯当','徐茂功','侯君集','罗成');
8 var_dump(array_slice($arr,0)); //输出:数组全部内容 9 var_dump(array_slice($arr,0,3)); //输出:array 0 => string '魏征' (length=6) 1 => string '秦琼' (length=6)2 => string '程咬金' (length=9) 10
7、array_splice($array,$start,$length,$replace);将一个数组从某个位置开始截取$length个长度,并将截取的部分用数组$replace进行替换
1
$arr = array('魏征','秦琼','程咬金','单雄信','王伯当','徐茂功','侯君集','罗成');
var_dump(array_splice($arr,3,5,array('史大奈','金甲','童环','尉迟南','尉迟北'))); 2 var_dump($arr);
8、array_chunk($array,$length,$bool); //将数组按照特定的长度分割形成一个多维数组
1 /** 2 * array_chunk($array,int $length) 3 * @param array $array 要操作的数组 4 * @param int $length 分隔的长度 5 * @param array 6 */ 7 $arr = array('魏征','秦琼','程咬金','单雄信','王伯当','徐茂功','侯君集','罗成'); 8 var_dump(array_chunk($arr, 2, true)); 9 /* 输出: 10 array 11 0 => 12 array 13 0 => string '魏征' (length=6) 14 1 => string '秦琼' (length=6) 15 1 => 16 array 17 2 => string '程咬金' (length=9) 18 3 => string '单雄信' (length=9) 19 2 => 20 array 21 4 => string '王伯当' (length=9) 22 5 => string '徐茂功' (length=9) 23 3 => 24 array 25 6 => string '侯君集' (length=9) 26 7 => string '罗成' (length=6) 27 */
八、使用回调函数处理数组
1、array_map($callback,$array); 通过回调函数作用于数组的每个元素上,形成新的数据
1 /** 2 * array_map($callback, $array1, $array2) 对数组的每个元素进行操作,返回一个操作后的新数组 3 * @param string $callback 回调函数名称 4 */ 5 6 function md5Pwd($val) 7 { 8 return md5($val); 9 } 10 11 $password = array('abcdefg','123456','admin@admin.com'); 12 var_dump(array_map('md5Pwd',$password)); 13 /** 14 输出:array 15 0 => string '7ac66c0f148de9519b8bd264312c4d64' (length=32) 16 1 => string 'e10adc3949ba59abbe56e057f20f883e' (length=32) 17 2 => string '64e1b8d34f425d19e1ee2ea7236d3028' (length=32) 18 */ 19 20
2、array_filter($array,$callback); //通过回调函数对数组各个元素进行过滤
1 /** 2 * array_filter($array, $callback); 对数组的各单元进行过滤处理 3 * @param array $array 4 * @param string $callback 回调函数名称 5 */ 6 7 8 function filterBadWords($var) 9 { 10 $badWords = array('狗屎','杀人','卖血'); 11 if(!in_array($var, $badWords)) 12 { 13 return $var; 14 } 15 } 16 var_dump(array_filter(array('狗屎','你好','永远'),'filterBadWords')); //输出:array 1 => string '你好' (length=6) 2 => string '永远' (length=6)
九、数组排序
1、sort($array); 对数组进行排序,值从小到大排列
2、rsort($array);对数组进行排序,值从大到小排列
3、ksort($array);根据键的大小来对数组进行排序,键从小到大
4、krsort($array);根据键的大小对数组进行逆向排序,键从大到小
5、asort($array);对数组进行排序并保持原来的索引关系
6、arsort($array);对数组进行逆向排序并保持原来的索引关系
7、usort($array,$callback);通过回调函数对数组进行排序
8、uksort($array,$callback);通过回调函数判断键值对数组进行排序
9、array_multisort($callback,$array1,$array2,……);对数组进行排序
1 /** 2 * array_multisort($array, $array2) 对多个数组进行排序或对某个数组的某个维进行排序 3 */ 4 $a1 = array('d','b','e','c'); 5 $a2 = array('hi','am','i','ab'); 6 var_dump(array_multisort($a1, $a2)); 7 var_dump($a1); //输出:array 0 => string 'b' (length=1) 1 => string 'c' (length=1) 2 => string 'd' (length=1) 3 => string 'e' (length=1) 8 var_dump($a2); //输出:array 0 => string 'am' (length=2) 1 => string 'ab' (length=2) 2 => string 'hi' (length=2) 3 => string 'i' (length=1)
十、其他函数
1、array_reverse($array); //将数组的值倒转
2、shuffle($array); //打乱数组
3、array_rand($array,$num);从数组中随机取出$num个值