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循环获取GET和POST值的代码
Apr 09 PHP
php 设计模式之 工厂模式
Dec 19 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 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中的HashTable结构详解
2013/06/13 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
销售顾问的岗位职责
2013/11/13 职场文书
社团活动总结范文
2014/04/26 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL