PHP数组处理
1、如何删除两个数组中有交集的元素?
[php] view plain copy
- foreach($content_list_temp_recommend as $k=>$v){
- $kk=array_search($v['aid'], $aid_arr_temp);//$v['aid']必定是$aid_arr_temp数组内元素之一的情况
- $msg.=$aid_arr_temp[$kk].",";
- if($kk !== false){//只要不是false就是找到了
- unset($aid_arr_temp[$kk]);//删除后,索引键保持不变
- }
- }
- $aid_arr= array_values($aid_arr_temp);//经过array_values()函数处理过后,索引键重新分配。
2、如何在数组头部和尾部及任意位置插入元素?
[php] view plain copy
- ①插入元素
- array_unshift();//在数组头部插入一个或多个元素
- array_push();//在数组尾部插入一个或多个元素
- array_splice($arr,$start,0,$arr1);//在数组的第$start+1个位置插入新元素(指的是头部和中部任意位置,但不包括尾部),注意:参数3一定要是0
- ②删除元素
- array_shift();//删除数组中首个元素,并返回删除后的值
- array_pop();//删除数组的最后一个元素(出栈),并返回删除后的值
3、如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变
[php] view plain copy
- $arr=array(
- array('id'=>1,'name'=>'will','age'=>23),
- array('id'=>2,'name'=>'myth','age'=>32),
- array('id'=>3,'name'=>'allen','age'=>27),
- array('id'=>4,'name'=>'martin','age'=>23)
- );
- foreach($arr as $k=>$v){
- $tag1[]=$v['age']; //age排序字段
- $tag2[]=$v['id']; //id排序字段
- }
- //相当于 select * from $arr order by $tag1 DESC,$tag2 ASC;//特点:$tag1、$tag2、$arr数组的元素个数必须要一致
- array_multisort($tag1,SORT_DESC,$tag2,SORT_ASC,$arr);//根据年龄从大到小排列,年龄相同则按id升序排列
- echo "<pre>";print_r($arr);exit;
- ?>
[php] view plain copy
- <?php
- //php二维数组如何按照指定列进行排序?
- function arrSortByField(&$list, $field, $call_func=NULL, $sort_type=SORT_ASC){//引用传值
- $sort_filed = array();
- foreach ($list as $val) {
- if (!isset($val[$field])) return false;
- $sort_filed[] = is_null($call_func) ? $val[$field] : call_user_func($call_func,$val[$field]);
- }
- return array_multisort($sort_field,$sort_type,$list);//$list顺序会随$sort_field顺序变化而变化
- }
- $list= array(
- array('id' =>3, 'name' => 'asdfsdf'),
- array('id' =>1, 'name' => '12'),
- array('id' =>4, 'name' => '10sdf'),
- array('id' =>2, 'name' => 'ada'),
- array('id' =>5, 'name' => 'aasdfbc')
- );
- arrSortByField($list,'name','strlen');//按照 "name" 列的值长度进行排序
- echo "<pre>";print_r($list);
- arrSortByField($list,'id');//按照 "id" 列的值大小进行排序
- echo "<pre>";print_r($list);
?>