PHP涨姿势——那些熟悉又陌生的方法(Array篇)

写在前面的废话

入坑时间久了,有时候总会觉力不从心、每遇到一个BUG的时候总有一些新发现,然而多数都能在文档中找到答案。于是决定好好撸一撸PHP的一些常用或不常用的方法。先从Array类的开始吧

一、array_change_key_case

返回字符串键名全为小写或大写的数组
input ----需要操作的数组。
case ---- CASE_UPPER 或 CASE_LOWER(默认值)。

这个函数用法比较简单,两个参数,返回字符串键名全为小写或大写的数组;
但这里我想重点说的是异常情况下也就是输入值不是数组时的返回值。
官方文档说明:

Returns an array with its keys lower or uppercased, or FALSE if array is not an array.
Throws E_WARNING if array is not an array.

也就是说在函数输入值不是期望的数组类型时,返回值是false 并且会抛出一个 E_WARNING 级别的错误。

	$input_array = 'I am not Array';
	$new = array_change_key_case($input_array);
	var_dump(NULL===$new );
	var_dump(false===$new);

看一下上面这几行代码。输出结果会是什么?PHP7和PHP5 有什么区别?动手试一下吧。

二、array_column

返回数组中指定的一列 (PHP 5 >= 5.5.0, PHP 7)
input* – 需要取出数组列的多维数组(或结果集)
column_key ---- 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)
index_key ---- 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

用这个函数我们可以从一个多维数组或结果集中取出特定的列来组成新的数组。举个例子:

$area = array(
	['id'=>1,'name'=>'北京','code'=>'bj'],
	['id'=>2,'name'=>'天津','code'=>'tj'],
	['id'=>3,'name'=>'上海','code'=>'shh'],
	['id'=>4,'name'=>'重庆','code'=>'chq'],
);
//出name 列
$area_names = array_column($area,'name');
/**
Array
(
    [0] => 北京
    [1] => 天津
    [2] => 上海
    [3] => 重庆
)
**/

实际很多情况下我们可能需要用数据中特定的值当做键值;这时候就需要用到第三个参数;

$code_names = array_column($area,'name','code')
/**
Array
(
    [bj] => 北京
    [tj] => 天津
    [shh] => 上海
    [chq] => 重庆
)
**/

使用时注意PHP版本,(PHP 5 >= 5.5.0, PHP 7) PHP5.5及以后版本才有这个方法。
下面提供一个老版本兼容方法:

if (!function_exists('array_column')) {
    function array_column($input, $column_key, $index_key = null) {
    	$return_ = array();
    	if(!is_array($input)){
    		return NULL;
    	}
    	foreach ($input as $key => $value) {
    		if (!isset($value[$column_key])) {
    			continue;
            }
            if (isset($index_key)){
            	$return_[$value[$index_key]] = $value[$column_key]);
            }else{
            	$return_[] = $value[$column_key]);
            }
    	}
    	return $return_;
    }
}

三、array_combine

创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
keys ---- 将被作为新数组的键。非法的值将会被转换为字符串类型(string)。
values ---- 将被作为数组的值。

这个函数能够将两个数组合并成一个新的数据。但是又一个重要的条件就是两个数组的程度要一致。如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误(E_WARNING)。 返回值一般会是false;
在无法保证keysvaluse 的长度适中一致的情况下,建议在使用该函数前先判断两者的长度;

$color = array('green', 'red', 'yellow');
$fruits = array('avocado', 'apple', 'banana');
if(count($color) == count($fruits)){
	$combine = array_combine($color, $fruits);
}
var_dump($combine);

四、array_chunk

将一个数组分割成多个
input ---- 需要操作的数组
size ---- 每个数组的单元数目
preserve_keys ---- 设为 TRUE,可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。默认值是 FALSE

讲真实际开发中没有用过这个函数,需要分组段的话一般会在具体需要遍历数组的地方进行处理;
使用这个函数如果 size 参数是动态的那就要特别注意这一点:
如果 size 小于 1,会抛出一个 E_WARNING 错误并返回 NULL

五 、array_key_exists

检查给定的键名或索引是否存在于数组中
key ---- 要检查的键。
search — 一个数组,包含待检查的键。

判断数组中是否存在某个索引;我以为这种般判断是可以用 isset()来判断的;就像这样:

search = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search)) {
    echo "array_key_exists() : In  the array".PHP_EOL;
}
if (isset($search['first'])) {
    echo "isset() :  In the array";
}

但是如果刚好遇到这样的情况:那就是判断的键所对应的值刚好是 NULL;
比如 $search = array('first' => NULL, 'second' => 4);
上面的结果就不太一样啦!有兴趣就动手试一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devin_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值