8个PHP数组面试题
下面是一系列PHP数组相关的面试题,以供参考和练习:
题目一:创建长度为10的数组,数组中的元素为递增的奇数,首项为1。
```php
function createOddIncrementArray($length = 10, $first = 1) {
$arr = array();
for ($i = $first; $i <= $first + $length - 1; $i += 2) { // 从首项开始递增偶数步数直到总长度满足要求
$arr[] = $i; // 添加元素到数组中
}
return $arr; // 返回完成的数组
}
$resultArray = createOddIncrementArray(10); // 创建数组并打印结果
print_r($resultArray); // 输出数组内容,结果为一个包含递增奇数的数组。
```
输出:数组中包含从1开始的递增奇数序列。
题目二:创建长度为10的数组,数组中的元素满足斐波那契数列的规律。 (斐波那契数列的定义如上所述)
```php
function createFibonacciArray($length = 10) {
if ($length < 1) return array(); // 确保长度至少为1,因为斐波那契数列至少有两个数(起始项)且最小长度为前两个数占据的索引。当length为负数时返回空数组。
$arr = array(0, 1); // 前两项初始化数组(根据定义)
一、斐波那契数列的生成与展示
在PHP中,我们可以定义一个函数来计算斐波那契数列并输出前n项的结果。这是一个通过循环实现数列生成,直到长度为给定长度的简单过程。在展示结果时,使用了`print_r()`函数以更易理解的方式输出数组内容。我们可以清晰地看到数组中的每个元素都是前两个元素的和。具体实现如下:
```php
function arrFibo($len){
$arr = array(); //初始化空数组
$arr[0] = 0; //斐波那契数列第一项为0
$arr[1] = 1; //斐波那契数列第二项为1
for($i=2;$i<$len;$i++){ //从第三项开始循环计算每一项的值
$arr[$i] = $arr[$i-1]+$arr[$i-2]; //当前项等于前两项之和
}
return $arr; //返回计算得到的斐波那契数列数组
}
echo "
"; //以预格式化方式输出,使得数组结构更清晰"; //结束预格式化输出print_r(arrFibo(10)); //输出斐波那契数列前十个数
echo "
```
输出结果为:
```plaintext
Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 2
[4] => 3
[5] => 5
[6] => 8
[7] => 13
[8] => 21
[9] => 34
)
```
方法①:数组合并与值覆盖
PHP中,处理数组合并时,不同的函数有不同的处理方式。当我们使用array_merge()函数时,如果两个数组中存在相同的键名,后面的值会覆盖前面的值。但当我们使用array_merge_recursive()函数时,相同键名的值会被递归组合成一个数组。让我们看看代码示例:
想象一下两个篮子里装满了水果,你用array_merge()函数将这两个篮子合并,如果两个篮子里都有苹果,那么第一个篮子里的苹果会被第二个篮子里的苹果取代。而使用array_merge_recursive()函数则不同,它会把两个篮子里的苹果都放在一起,形成一个新的更大的苹果组合。输出的结果正是这种逻辑的体现。接下来让我们看看另一个方法。
方法②:自定义数组排序函数
方法③:数组的逆序操作
PHP代码:数组元素互换位置
在PHP中,我们可以通过编写一段简单的代码来实现数组元素的互换位置。下面是一段示例代码:
```php
$arr = array("a","b","c",1,10); // 定义了一个包含字符串和数字的数组
$length = count($arr); // 获取数组的长度
$halfLength = floor($length / 2); // 计算数组长度的一半,向下取整
// 开始循环,对数组的前半部分进行遍历
for ($i = 0; $i < $halfLength; $i++) {
$temp = $arr[$i]; // 临时存储当前位置的元素值
// 判断数组元素数量的奇偶性
if ($length % 2 != 0) { // 如果元素数量是奇数
$k = $halfLength - $i; // 计算对称位置的索引
} else { // 如果元素数量是偶数
$k = $halfLength - $i - 1; // 计算对称位置的索引(减去1,避免偶数时越界)
}
// 交换元素位置
$arr[$i] = $arr[$k]; // 将对称位置的值赋给当前位置
$arr[$k] = $temp; // 将当前位置的值赋给对称位置,完成交换
}
echo "
"; // 输出格式化的数组结构,便于查看结果"; // 结束输出格式化的数组结构print_r($arr); // 打印数组内容
echo "
?>
``` 输出的结果将是: 代码如下: Array ( [0] => 10 [1] => 1 [2] => c [3] => b [4] => a )。这段代码中,我们将数组中的元素与其对称位置的元素进行了交换。对于奇数长度的数组,对称位置的索引计算相对简单;对于偶数长度的数组,我们需要减去一个单位来避免索引越界的问题。通过这样的交换操作,可以实现数组元素的反转排列。注意这里的数组索引是从零开始的,因此在计算对称位置的索引时要进行相应的调整。这段代码通过简单的循环和变量操作实现了数组的对称元素交换,展示了PHP语言的灵活性和实用性。