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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
PHP初学入门
Nov 19 PHP
php at(@)符号的用法简介
Jul 11 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 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下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python列表与元组详解实例
2013/11/01 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
Python函数中不定长参数的写法
2019/02/13 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
英国在线花园中心:You Garden
2018/06/03 全球购物
表彰先进的通报
2014/01/31 职场文书
适用于所有创业者的创业计划书
2014/02/05 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
工地安全质量标语
2014/06/07 职场文书
天气温馨提示语
2015/07/14 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python