8个PHP数组面试题
1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1.
代码如下:
function arrsort($first,$length){
$arr = array();
for($i=$first;$i<=$length;$i++){
$arr[] = $i*2-1;
}
return $arr;
}
$arr1 = arrsort(1,10);
print_r($arr1);
输出:
=> 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 )
2.创建长度为10的数组,数组中的数为递增的等比数,比值为3,首项为1.
//$num为比值
function arrsort($first,$length,$num){
$arr= array();
for($i=$first;$i<=$length;$i++){
//pow($num,$i-2);返回$num的($i-2)次方
$arr[] = $num*pow($num,$i-2);
}
return $arr;
}
$arr1 = arrsort(1,10,3);
print_r($arr1);
输出:
[5] => 243 [6] => 729 [7] => 2187 [8] => 6561 [9] =>
19683 )
3.求数组中最大数的下标.
$maxval = max($arr);
foreach($arr as $key=>$val){
if($maxval == $val){
$maxkey = $key;
}
}
return $maxkey;
}
$arr = array(0,-1,-2,5,"b"=>15,3);
echo maxkey($arr);
输出:
4.创建一个长度为10的数组,数组中的元素满足斐波拉契数列的规律.
(
斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定
义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*). 特别指出:第0项是0,第1项是第一个1。)
function arrFibo($len){
$arr[0] = 0;
$arr[1] = 1;
for($i=2;$i<$len;$i++){
$arr[$i] = $arr[$i-1]+$arr[$i-2];
}
return $arr;
}
echo "<pre>";
print_r(arrFibo(10));
echo "</pre>";
输出:
(
[0] => 0
[1] => 1
[2] => 1
[3] => 2
[4] => 3
[5] => 5
[6] => 8
[7] => 13
[8] => 21
[9] => 34
)
5.计算数组中最大数和最小数的差.
两种方法:
①max/min
输出:
②sort把元素按从小到大排序/rsort吧元素按从大到小排序
function arrsub($arr){
sort($arr);
$min = $arr[0];
rsort($arr);
$max = $arr[0];
$sub = $max - $min;
return $sub;
}
$arr = array(-1,-2,100);
echo arrsub($arr);
输出:
102
6.写一个方法,将一个长度超过10的数组最后5项直接截取,不改变顺序变为前5项,如{1,2,3,4,5,6,7,8,9,10}变为{6,7,8,9,10,1,2,3,4,5}.
思路:先把数组截取相应的长度( array_slice ),再把2段数组拼接( array_merge )
function arrsort($arr){
$num = count($arr);
if($num > 10){
//array_slice($arr,起始位置,截取长度,保留索引(默认为false))
$arr_firstpart = array_slice($arr,0,$num-5,true);
$arr_lastpart = array_slice($arr,($num-5),5,true);
}else{
echo "数组不超过10个元素,请重新输入";
exit();
}
//拼接
$arr_new = array_merge($arr_lastpart,$arr_firstpart);
return $arr_new;
}
$arr = array("a"=>1,2,3,8,9,6,"b"=>5,-1,"c"=>8,0,7);
echo "<pre>";
print_r($arr);
echo "<br>= = = = = 拼接后 = = = = <br><br>";
print_r(arrsort($arr));
echo "</pre>";
输出:
(
[a] => 1
[0] => 2
[1] => 3
[2] => 8
[3] => 9
[4] => 6
[b] => 5
[5] => -1
[c] => 8
[6] => 0
[7] => 7
)
= = = = = 拼接后 = = = =
(
[b] => 5
[0] => -1
[c] => 8
[1] => 0
[2] => 7
[a] => 1
[3] => 2
[4] => 3
[5] => 8
[6] => 9
[7] => 6
)
当数组不满足长度为10时:
输出:
(
[a] => 1
[0] => 2
[1] => 3
)
= = = = = 拼接后 = = = =
数组不超过10个元素,请重新输入
7.将两个数组连接成一个新数组.
方法①使用array_merge()函数
方法②使用array_merge_recursive()函数递归追加数组
( array_merge_recursive() 函数与 array_merge() 函数 一样,将一个或多个数组的元素的合并起来,一个数组中的值附加在前一个数组的后面。并返回作为结果的数组。
但是,与 array_merge() 不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。)
$arr = array("a"=>1,"b"=>2,3);
$arr2 = array("a"=>Dee,3,5);
$arr3 = array_merge($arr,$arr2);
$arr4 = array_merge_recursive($arr,$arr2);
echo "<pre>";
print_r($arr3);
echo "<br> = = = = = <br><br>";
print_r($arr4);
echo "</pre>";
输出:
(
[a] => Dee
[b] => 2
[0] => 3
[1] => 3
[2] => 5
)
= = = = =
(
[a] => Array
(
[0] => 1
[1] => Dee
)
[b] => 2
[0] => 3
[1] => 3
[2] => 5
)
第一个输出的数组中索引为"a"的值1被索引被第二个数组中索引为"a"的值Dee覆盖了。
方法③
function arrsort($arr1,$arr2){
$arr_new = $arr1;
foreach($arr2 as $key=>$val){
$arr_new[] = $val;
}
return $arr_new;
}
$arr1 = array("a"=>1,"b"=>2,3);
$arr2 = array("a"=>Dee,"c"=>3,5);
echo "<pre>";
print_r(arrsort($arr1,$arr2));
echo "</pre>";
输出:
(
[a] => 1
[b] => 2
[0] => 3
[1] => Dee
[2] => 3
[3] => 5
)
如果是索引数组而且有重复的索引,则第二个数组中的这个重复的索引会被修改成新的索引。
8.数组逆序( 不能使用rsort函数,不能生成新数组 )
使用array_reverse()函数会创建新的数组,所以不能使用。
$arr = array("a","b","c",1,10);
$i = "";//要替换位置的数的下标
$j = "";//临时变量
$k = "";//被替换位置的数的下标
$len = count($arr);
$half_len = floor($len/2);//向下取整,取整的值是循环的次数
for($i=0;$i<$half_len;$i++){
$j = $arr[$i];
//判断数组个数奇偶
if($len%2!=0){ //奇数
$k = $half_len*2-$i;
}else{
//偶数
$k = $half_len*2-$i-1;
}
$arr[$i] = $arr[$k];
$arr[$k] = $j;
}
echo "<pre>";
print_r($arr);
echo "</pre>";
输出:
Array
(
[0] => 10
[1] => 1
[2] => c
[3] => b
[4] => a
)
8个PHP数组面试题的更多相关文章
- HashMap 数组应用面试题(Point)
今天看了一题面试题,以为很简单,不过自己写了遍,没有完全写出来: 题目是这样的: 给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点.按照距离由小 ...
- java数组面试题
一维数组可以写成:int[ ]x 或者int x[ ]: 二维数组可以写成:int[ ] y [ ] 或者int y[ ][ ] 或者int [ ][ ]y 面试题如下: 声明数组int[ ...
- PHP数组函数试题
使用Ctrl+A查看答案 1.将数组的键名全部转换成小写和大写的函数是什么?答:array_change_key_case($array [,CASE_LOWER|CASE_UPPER]) 2.创建一 ...
- JavaScript类数组转换为数组 面试题
1.JavaScript类数组转换为数组 (1)方法一:借用slice (2)方法二:Array.from 2.代码 <!DOCTYPE html> <html lang=" ...
- javascript判断是否为数组 面试题
1.方法 instanceof:多框架下有问题(看示例代码). Object.prototype.toString.call():兼容性很好 Array.isArray: IE9+以上 constru ...
- 剑指offer数组列表
一.数组 面试题3 : 找出数组中重复的数字 面试题3(二):不修改数组找出重复的数字 面试题4:二维数组的查找 面试题21:调整数组顺序使奇数位于偶数前面 面试题39:数组中出现次数超过一半的数字 ...
- 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)
写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...
- C语言深度剖析-----多维数组和多维指针
多维数组和多维指针 指向指针的指针 指针变量同样也有传址调用和传值调用 case1:估算要5个字节的空间,实际只用前面3个字节,设计释放空的2字节 case2:扩充到10字节 二维数组与二维指针 二维 ...
- 详解Javascript中的Array对象
基础介绍 创建数组 和Object对象一样,创建Array也有2种方式:构造函数.字面量法. 构造函数创建 使用构造函数的方式可以通过new关键字来声明,如下所示: 12 var arr = new ...
随机推荐
- C# OracleHelper
using System; using System.Configuration; using System.Data; using System.Collections; using Oracle. ...
- [笔记] Python基础---列表
1.定义列表 列表由数据构成的有限序列,即按照一定的线性顺序排列,排列而成的数据项的集合. 2.创建列表 使用‘[ ]’括起来就已经创建了一个列表,例: my_first_list = [] #空列表 ...
- SOAP1.1 and SOAP1.2
在用cxf 做webservice客户端的时候碰到的: javax.xml.ws.soap.SOAPFaultException: A SOAP 1.2 message is not valid wh ...
- springmvc 定时器 多数据源
0.目的:测试网上多数据源切换代码靠不靠谱 1.先说需求:根据摄像头采集到的数据,做一些业务上的特定处理,但是,但是很重要,摄像采集数据不直接存在此数据库,需要定时的去外部DB去取数据,这就涉及到多数 ...
- 如鹏网学习笔记(十四)ASP.NET
Asp.net笔记 一.Socket类 进行网络编程的类,可以在两台计算机之间进行网络通讯 过程: 向服务器发送指令: GET /index.html HTTP/1.1 Host:127.0.0.1: ...
- 一图解析 React组件生命周期 (React Component Lifecycle)
React LifeCycle v1 参考官方文档作成 可放大 参考:https://reactjs.org/docs/react-component.html 数字补丁数字补丁数字补丁数字补丁数 ...
- SyntaxError: expected expression, got '<'
用firebug查看网络请求发现js没有问题,问题在于ajax返回的数据错误,格式是<script type='text/javascript'> ... ... </script& ...
- 【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
1.0 列表控件RecyclerView的网格布局排列实现,关键词GridLayoutManager. LinearLayoutManager 实现顺序布局 GridLayoutManager 实现网 ...
- PHP开发支付宝之电脑网站支付--流程简介
前言 前端时间自己开发了一个drupal的支付宝模块,现在整理一下过程,因为支付宝官方网站提供的接口及文档都是新接口的,而且使用新接口的过程比较麻烦一点,所以整理一下 1.支付宝的账号必须经过企业资格 ...
- 用WebStorm开发TypeScript
为什么是TypeScript 最近在做H5的游戏,最终选定的TypeScript作为开发语言.主要是看重他有强类型和Class,作为习惯使用AS3,Java等强类型编程的人来说,还是习惯这种编程写法. ...