您的位置:首页 > 编程语言 > PHP开发

PHP常用数组函数总结

2018-02-11 15:47 691 查看
<?php
/**
* 数组函数.
* User: zheng
*
*
*/

function showData($data){
if(is_array($data)){
var_dump($data);
}else{
echo  $data;
}
exit();
}

$testArr = [
'a'=>'1',
'b'=>'2',
'c'=>['e1'=>'1','e2'=>'2'],
'd'=>5
];
$testArr2 = ['test1.jpg',5,'name'=>'shop01','diffItem'];
$keyArr = [
['id'=>1,'name'=>'shop01','img'=>'test1.jpg','price'=>5.0],
['id'=>2,'name'=>'shop01','img'=>'test2.jpg','price'=>5.0],
['id'=>3,'name'=>'shop01','img'=>'test3.jpg','price'=>5.2]
];

//转换数组索引大小写
$toUpperKeyArr = array_change_key_case($testArr,CASE_UPPER);
//var_dump($toUpperKeyArr);

//将一个数组分割成多个
$chuckArr = array_chunk($testArr,2,true);
//showData($chuckArr);

//取出多维数组某一列的值(可以指定返回列数组的索引)
$getArrColumn = array_column($keyArr,'img','id');
//showData($getArrColumn);

//创建一个数组,以第一个数组的值为其键,第二个数组的值为其值
$bulidArr = array_combine(array_column($keyArr,'id'),$keyArr);
//showData($bulidArr);

//统计数组中所有的值出现的次数
$countArrItem = array_count_values($testArr2);
//showData($countArrItem);

//返回第一个数组和第二个数组的差集(键名和值都要比较)
$diffKeyMapArr = array_diff_assoc($testArr2,$keyArr[0]);
//showData($diffKeyMapArr);

//返回第一个数组和第二个数组的差集(按值比较)
$diffArr = array_diff($testArr2,$keyArr[0]);
//showData($diffArr);

//返回第一个数组和第二个数组的差集(按键名比较)
$diffArrByKey = array_diff_key($testArr2,$keyArr[0]);
//showData($diffArrByKey);

//使用指定的键和值填充数组
$fillArrByKey = array_fill_keys(['0','1'],[2,'Tom','testItme']);
//showData($fillArrByKey);

//用给定的值填充数组
$fillArrByValue = array_fill(0,5,'zyytest');
//showData($fillArrByValue);

//用回调函数过滤数组中的单元
//示例1:去除值为数组的单元
$filterArr = array_filter($testArr,'remove');
function remove($item)
{
if(!is_array($item)){
return true;
}
return false;
}
//showData($filterArr);
//示例2 :如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目,最常见的就是去空值
$testArr3 = ['','1'=>'2','2'=>'3','3'=>'4'];
$filterArr2 = array_filter($testArr3);
//showData($filterArr2);

//示例3:回调函数传参(使用闭包)
$num=1;
$num2=2;
$filterArr3 = array_filter($testArr3,function ($item)use($num,$num2){
return $item>$num+$num2;
});
//showData($filterArr3);
//交换数组中的键和值
//如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃,成功返回交换后的数组,失败返回 NULL
$flipArr =  array_flip($testArr2);
//showData($flipArr);

$testArr4 = [0,1,2,3,'a'=>4];
$testArr5 = [0,1,2,'a'=>3];
//按值计算数组的交集 (保留第一个数组参数的索引)
$intersectArr = array_intersect($testArr4,$testArr5);
//showData($intersectArr);

//按键名比较计算数组的交集
$intersectArrByKey = array_intersect_key($testArr4,$testArr5);
//showData($intersectArrByKey);

//按键名和值计算数组的交集
$intersectArrAssoc = array_intersect_assoc($testArr4,$testArr5);
//showData($intersectArrAssoc);

//检查数组里是否有指定的键名或索引
//isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会
$bool = array_key_exists('a',$testArr);

//返回数组中部分的或所有的键名
$arrKeys = array_keys($testArr);
//showData($arrKeys);
//示例2:返回值为2,且全等比较的键
$arrKeys2 = array_keys($testArr,2,true);
//为数组的每个元素应用回调函数

$mapArr = array_map(function ($item){return $item+2;},$testArr4);
//showData($mapArr);

//递归的合并数组
/**
* 如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,
* 因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。
* 然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。
*/
$mergeA = ['a'=>1,'b'=>['1','2'],'c'=>3];
$mergeB = ['a'=>2,'b'=>3,'c'=>4];
$merge_recursive = array_merge_recursive($mergeA,$mergeB);
//showData($merge_recursive);

//合并一个或多个数组
/**
* 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。
* 然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
* 如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符
*/
$mergeArr = array_merge($mergeA,$mergeB);
$mergeArr2 = $mergeA+$mergeB;
//showData($mergeArr);
//showData($mergeArr2);

//一次对多个数组进行排序
//根据某一维或多维对多维数组进行排序。
$sortArray = [
['id'=>5,'name'=>'song'],
['id'=>2,'name'=>'songsong'],
['id'=>9,'name'=>'a'],
['id'=>9,'name'=>'zyy']
];
/*示例1,一次对多个数组排序 (sort的升级版,用于一维数组)*/
$sort1 = [8,2,9];
$sort2 = [6,2,8];
array_multisort($sort1,$sort2,SORT_ASC);
//showData($sort1);
//showData($sort2);
/*示例2,根据数组的某一维排序 (用于二维数组)
例如以下示例将数组 $sortArray 按id列的正序排列为第一排序,按name列的倒序排列为第二排序
*/
array_multisort(array_column($sortArray,'id'),
SORT_ASC,array_column($sortArray,'name'),
SORT_DESC);
//    showData($sortArray);

//以指定长度将一个值填充进数组
$padArr = array_pad($sort1,-5,0);
//showData($padArr);
/**
* 与array_fill 比较 array_pad 是 填充到 指定的长度,比如上例是填充到5,负数表示是从左边开始填充
*  而array_file 是指 填充 多少个
*/

//弹出数组最后一个单元
$pop = array_pop($sort1);
//showData($sort1);

//将一个单元和多个单元压入数组的尾部
array_push($sort1,10);
//showData($sort1);

//从数组中随机取出一个或多个单元
$randKey = array_rand($sort1,2);
//showData($randKey);

//用回调函数迭代地将数组简化为单一的值
$testArr6 = ['2','3','4'];
$reduceArr = array_reduce($testArr6,function($item,$param){
return $item*$param;
},2);
//showData($reduceArr);

$oldArr = ['key1'=>['a','b','c'],'key2'=>'d','key3'=>['e']];
$replaceArr = ['key1'=>['f'],'key2'=>'g'];
//使用传递的数组替换第一个数组的元素
$replaceResult = array_replace($oldArr,$replaceArr);
//showData($replaceResult);

//使用传递的数组递归地替换第一个数组的元素
$recursiveReplaceResult = array_replace_recursive($oldArr,$replaceArr);
//showData($recursiveReplaceResult);

$reverseArr  =['a'=>2,'b'=>3,'c'=>4];
//返回单元顺序相反的数组
$reverse = array_reverse($reverseArr,true);
//showData($reverse);

//在数组中搜索给定的值,如果成功则返回首个相应的键名
$searchArr = array_search('3',$reverseArr);
//showData($searchArr);

//将数组开头单元移出数组
$removeValue = array_shift($reverseArr);
//showData($removeValue);

//在数组开头插入一个或多个单元
$arrayLength = array_unshift($reverseArr,6,7);
//showData($arrayLength);

$uniqueArr = [1,1,2,3,4,2];
//移除数组中重复的值
$unique = array_unique($uniqueArr);
//showData($unique);

//返回数组的所有值并给其建立数字索引
$arrayValue = array_values($reverseArr);
//showData($arrayValue);

//对数组逆向排序并保持索引
arsort($reverseArr,SORT_STRING);
// showData($reverseArr);

$sort3 = ['a'=>5,'b'=>2,'c'=>9];
//对数组排序并保持索引
asort($sort3,SORT_NUMERIC );
//showData($sort3);

//建立一个数组,包括变量名和它们的值
$a=2; $b=3; $c=4;
$compact =compact('a','b','c');
//showData($compact);

// 从数组中将变量导入到当前的符号表
extract(['my_var'=>2]);
//show($my_var);

//检查数组中是否存在某个值
$bool = in_array('2',$compact);
//showData($bool);

//打乱数组
shuffle($sort3);
//showData($sort3);

//对数组排序
sort($sort3);
//showData($sort3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP 数组函数