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目录管理函数小结
Sep 10 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
php 数组的一个悲剧?
May 11 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
PHP中数组定义的几种方法
Sep 01 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP输入输出流学习笔记
May 12 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
php文件上传的两种实现方法
Apr 04 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
浅谈如何提高PHP代码的质量
May 28 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 cookis创建实现代码
2009/03/16 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Django 视图层(view)的使用
2018/11/09 Python
对python中dict和json的区别详解
2018/12/18 Python
Django学习之文件上传与下载
2019/10/06 Python
python中列表的含义及用法
2020/05/26 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
小学优秀班主任事迹材料
2014/05/17 职场文书
工作保证书
2015/01/17 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
关于幸福的感言
2015/08/03 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
Python的property属性详细讲解
2022/04/11 Python