8个PHP数组面试题


Posted in PHP onJune 23, 2015

网上找的PHP数组题,准备自己做一遍并且记录下来。

1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1.

<?php
    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);

输出:

Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 )

2.创建长度为10的数组,数组中的数为递增的等比数,比值为3,首项为1.
<?php
     //$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);

输出:

Array ( [0] => 1 [1] => 3 [2] => 9 [3] => 27 [4] => 81 [5] => 243 [6] => 729 [7] => 2187 [8] => 6561 [9] => 19683 )

3.求数组中最大数的下标.

function maxkey($arr){
    $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);

输出:

b

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。)

<?php
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>";

输出:

Array

(

    [0] => 0

    [1] => 1

    [2] => 1

    [3] => 2

    [4] => 3

    [5] => 5

    [6] => 8

    [7] => 13

    [8] => 21

    [9] => 34

)

5.计算数组中最大数和最小数的差.

两种方法:

①max/min

输出:

102

②sort把元素按从小到大排序/rsort吧元素按从大到小排序

<?php
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 )

<?php
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>";

输出:

Array

(

    [a] => 1

    [0] => 2

    [1] => 3

    [2] => 8

    [3] => 9

    [4] => 6

    [b] => 5

    [5] => -1

    [c] => 8

    [6] => 0

    [7] => 7

)

= = = = = 拼接后 = = = =
Array

(

    [b] => 5

    [0] => -1

    [c] => 8

    [1] => 0

    [2] => 7

    [a] => 1

    [3] => 2

    [4] => 3

    [5] => 8

    [6] => 9

    [7] => 6

)

当数组不满足长度为10时:
$arr = array("a"=>1,2,3);

输出:
Array

(

    [a] => 1

    [0] => 2

    [1] => 3

)

= = = = = 拼接后 = = = =

数组不超过10个元素,请重新输入

7.将两个数组连接成一个新数组.

方法①使用array_merge()函数

array_merge($arr1,$arr2);

方法②使用array_merge_recursive()函数递归追加数组

( array_merge_recursive() 函数与 array_merge() 函数 一样,将一个或多个数组的元素的合并起来,一个数组中的值附加在前一个数组的后面。并返回作为结果的数组。

但是,与 array_merge() 不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。)

<?php
    $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>";

输出:

Array

(

    [a] => Dee

    [b] => 2

    [0] => 3

    [1] => 3

    [2] => 5

)

 = = = = =
Array

(

    [a] => Array

        (

            [0] => 1

            [1] => Dee

        )
    [b] => 2

    [0] => 3

    [1] => 3

    [2] => 5

)

第一个输出的数组中索引为"a"的值1被索引被第二个数组中索引为"a"的值Dee覆盖了。

方法③

<?php
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>";

输出:

Array

(

    [a] => 1

    [b] => 2

    [0] => 3

    [1] => Dee

    [2] => 3

    [3] => 5

)

如果是索引数组而且有重复的索引,则第二个数组中的这个重复的索引会被修改成新的索引。

8.数组逆序( 不能使用rsort函数,不能生成新数组 )

使用array_reverse()函数会创建新的数组,所以不能使用。

<?php
$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

)
PHP 相关文章推荐
php 数组的一个悲剧?
May 11 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
php实现socket推送技术的示例
Dec 20 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP实现图片压缩
Sep 09 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 #PHP
php发送邮件的问题详解
Jun 22 #PHP
PHP获取音频文件的相关信息
Jun 22 #PHP
php生成PDF格式文件并且加密
Jun 22 #PHP
用PHP生成excel文件到指定目录
Jun 22 #PHP
php通过baihui网API实现读取word文档并展示
Jun 22 #PHP
PHP读取汉字的点阵数据
Jun 22 #PHP
You might like
PHP学习之数组的定义和填充
2011/04/17 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
React组件的三种写法总结
2017/01/12 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
浅析python打包工具distutils、setuptools
2018/04/20 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python datetime中strptime用法详解
2019/08/29 Python
python tkinter控件布局项目实例
2019/11/04 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python如何爬取动态网站
2020/09/09 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
请说出以下代码输出什么
2013/08/30 面试题
校园公益广告语
2014/03/13 职场文书
主题班会演讲稿
2014/05/22 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
幼师个人总结范文
2015/02/28 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers