PHP中的数组函数学习(四)
今天我们来学习的是数组相关函数的第四篇文章,依然是一大堆的函数需要我们去了解记忆。不过也有很多很好玩的地方值得我们去深入的研究,特别是这些地方还很容易出面试题。相信一出现面试题这三个字大家就很感兴趣了吧,不要着急,我们一个一个地看。
返回数组中所有的值
之前我们已经学习过了一个 array_keys() 函数,作用是返回数组中的所有键。今天我们来学习的这个,则是返回数组中所有的值。
print_r(array_values(['a', '1.2', 'c', 4, 'g' => 1.2, 'c', 'd', 'e', '4']));
// Array
// (
// [0] => a
// [1] => 1.2
// [2] => c
// [3] => 4
// [4] => 1.2
// [5] => c
// [6] => d
// [7] => e
// [8] => 4
// )
array_values() 相信不少同学都使用过,如果面试官问你,如何重建一个数组的索引?那么千万不要犯晕哦,使用的就是这个函数。注意看上面的代码,测试数据里面的是有字符串的键信息的,使用 array_values() 之后,这个信息的键也变成了数字下标的索引信息了,也就是说,整个数组的索引被重建了。
数组数量
实在是太简单了吧,这个还用说?没错,单纯地获取数组元素的数量非常简单。
echo count([1,2,3]), PHP_EOL; // 3
你以为这个 count() 只有这么简单的一个功能就完了?太天真了哦,接下来就是我曾经见过的一道面试题,而且就是用这个 count() 函数就可以解决。
面试题目是:如何判断一个数组是多维数组?在不往下看的情况下自己想一想吧!
首先我们来看一下 count() 的第二个参数,它是一个接受常量值的参数。
$arr = [1,2,3,4=>[5, 6]];
echo count($arr), PHP_EOL; // 4
echo count($arr, COUNT_RECURSIVE), PHP_EOL; // 6
从代码中可以看出,COUNT_RECURSIVE 这个常量给第二个参数之后,count() 获取到的就是包含所有子元素的多维数组的数量。相信不少小伙伴一看到这个地方就知道上面题目的答案是什么了。
var_dump(count($arr) === count($arr, COUNT_RECURSIVE)); // bool(false)
直接使用普通不带第二个参数的 count() 和带上 COUNT_RECURSIVE 参数的 count() 一起对指定的数组比较,就可以判断这个数组是不是多维数组了。如果他们两个相等的话,那么这个数组就是一维的,如果不相等的话,这个数组就是一个多维数组了。
数组与变量的转换
数组和变量是怎么扯上关系的?其实意思就是我们可以将某个数组中的全部元素抽取出来变成当前运行环境下的变量,也可以通过相反的操作,将当前环境下的变量转换到数组中成为数组的元素。
$a = '1';
$b = '2';
$c = '3';
print_r(compact('a'));
// Array
// (
// [a] => 1
// )
// 7.3以后会 E_NOTICE
print_r(compact(['b', 'c', 'd']));
// Array
// (
// [b] => 2
// [c] => 3
// )
print_r(compact('a', 'b', ['c']));
// Array
// (
// [a] => 1
// [b] => 2
// [c] => 3
// )
首先我们看到的这个 compact() 函数,就是将当前环境下的变量转换成一个数组。其实这个函数的应用范围不多,大家更喜欢自己去写键值。除非是在某些非常自动化的环境下,比如我们有不可知的动态变量名之类的情况下需要将它们转换成数组,就可以使用这个函数。当然,这种情况也非常少见。