8个PHP数组面试题

网上找的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
)

(0)

相关推荐

  • PHP面试题之文件目录操作

    这道题其实并不难,考点主要在函数substr() strrchr()  array_pop()  strrpos() strpos() strrev() explode()  pathinfo(). 废话不多说了,直接给大家贴代码了. 获取文件后缀,遍历目录层次 /** * 5种方式获取文件后缀名 * 这道题其实就是考函数substr() strrchr() array_pop() strrpos() strpos() strrev() explode() pathinfo() * @param

  • PHP面试常用算法(推荐)

    一.冒泡排序 基本思想: 对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动. //冒泡排序 <?php function mysort($arr) { for($i = 0; $i < count($arr); $i++) { $isSort = false; for ($j=0; $j< count($arr) - $i - 1; $j++) { if($arr[$

  • PHP经典面试题之设计模式(经常遇到)

    设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景. 使用设计模式可以减轻我们的工作量,优化我们的代码. 设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!!!! /** * 单例模式 * @author YangYang <1812271619@qq.com> * 可以想成在一次http请求中只产生该类的一个对象(即只new classname一次) * 经典的例子是数据库连接(redis

  • PHP经典面试题集锦

    本文较为详细的分析了PHP经典面试题.分享给大家供大家参考.具体如下: 做了一下网络上的php题目,不知不觉做到现在.....把答案贴出来,供参考之用. 1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分) $a = date("Y-m-d H:i:s", strtotime("-1 day")); print_r($a); 2.echo(),print(),print_r()的区别(3分) echo 和print不是一个函数,是一个语言

  • PHP的文件操作与算法实现的面试题示例

    操作文件 1.使用5种以上的方式获取一个文件的扩展名 要求: dir/upload.image.jpg, 找出.jpg或者jpg <?php /** * 五种方式获取指定路径的文件扩展名 */ $str = "dir/upload.image.jpg"; function one ($str) { $arr = explode('.', $str); $count = count($arr); return $arr[$count - 1]; } function two ($s

  • PHP的关于变量和日期处理的一些面试题目整理

    变量相关 PHP变量的内部实现 编程语言的系统类型分为强类型和弱类型两种: 强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类 php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型 php变量类型及存储结构 php在声明或使用变量的时候,并不需要显式指明其数据类型 php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类: 标量类型

  • 33道php常见面试题及答案

    1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 复制代码 代码如下: 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2.执行程序段将输出(3). 复制代码 代码如下: 答:0 3.在HTTP 1.0中,状态码 401 的含义是(4):如果返回"找不到文件"的提示,则可用 header 函数,其语句为(5).

  • C语言sizeof和strlen的指针和数组面试题详解

    目录 一.概念 sizeof: strlen: 二.例题及解析 2.1 一维数组 2.2 字符数组 2.3 二维数组 三.总结 一.概念 sizeof: sizeof操作符的结果类型为size_t,(它在头文件用typedfe定义为unsigned int类型),计算的是分配空间的实际字节数.sizeof是运算符,可以以类型.函数.做参数 . strlen: strlen结果类型也为size_t(size_t strlen( const char *string )),但strlen是计算的空间

  • 8个PHP数组面试题

    网上找的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);    

  • C语言strlen和sizeof在数组中的使用详解

    目录 一.前言 二.sizeof在二维数组的试题 解读: 题解: 答案验证: 64位平台下: 32位平台下: 一.前言 前面我们详细讲了sizeof和strlen中的使用,基本涉及了所有一维数组可以和常见的题目类型 那么现在我们就将一维数组告一段落了,现在我们来开始讲解在二维数组的使用了,本篇是 sizeof和strlen的最后一篇了. 二.sizeof在二维数组的试题 #include<stdio.h> int main() { int a[3][4] = { 0 }; printf(&qu

  • C语言例题讲解指针与数组

    目录 1.概要复习 2.指针与数组笔试题 2.1一维数组 2.2字符数组 2.3字符串数组 2.4字符串指针 2.5二维数组 1.概要复习 本篇的内容主要围绕指针与数组.指针与字符串等之间的关系,以及进一步理解sizeof .strlen 的使用与意义. 数组是指具有相同类型元素的集合,字符串常量是一个指向在连续空间里存放的字符的首字符的地址的指针.我们会在下面理解数组与字符串数组的不同. sizeof 是一个操作符,是计算类型空间大小的.strlen 是针对字符串的库函数,用来求字符串的长度.

  • C++中求旋转数组中的最小数字(经典面试题)

    面试题:旋转数组的最小数字 题目:把一个数组的最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增数组的旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 算法: (1)当输入的旋转数组非法时:处理! (2)当输入的旋转数组正常时,index1 = 0:index2=length-1: a:如果arry[index1] <arry[index2]时:说明数组为原数组,并没有进行旋转:    b:如果arry[ind

  • 面试题:Java 实现查找旋转数组的最小数字

    在算法面试中,面试官总是喜欢围绕链表.排序.二叉树.二分查找来做文章,而大多数人都可以跟着专业的书籍来做到倒背如流.而面试官并不希望招收的是一位记忆功底很好,但不会活学活用的程序员.所以学会数学建模和分析问题,并用合理的算法或数据结构来解决问题相当重要. 面试题:打印出旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组 {3,4,5,1,2} 为数组 {1,2,3,4,5} 的一个旋转,该

  • 从java面试题了解你所模糊的数组

    前言 数组,最基础的一种数据结构.尽管看起来非常的简单.基础,但是面试往往逃不过它. 特性 下标从0开始 线性表数据结构 一组连续的内存空间来存储一组具有相同类型的数据 如何实现随机访问 从上面的特性可以得到几个关键词: 1.线性表.线性表就是数据排成一条线一样的结构.只有前后两个关系.比如:数组.链表.栈.队列等: 2.连续的内存空间和相同类型的数据.所以你所回答的不适合insert.delete就是基于这个原因,为了保持它的连续性. 数组根据下标实现随机访问数组元素的公式: a[i]_add

  • C语言中指针和数组试题详解分析

    目录 数组题: 程序一(一维数组): 字符数组 程序二(字符数组): 程序三(字符数组): 程序四(字符数组): 程序五(字符数组): 二维数组 程序六( 二维数组): 指针题 程序七( 指针): 程序八( 指针): 程序九( 指针): 程序十( 指针): 程序十( 图): 程序十一( 指针): 程序十二( 指针): 程序十三( 指针): 指针 和 数组 试题解析 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安

  • 利用hasOwnProperty给数组去重的面试题分享

    hasOwnProperty hasOwnProperty是javascript中用于检测对象是否包含某个属性的方法,返回一个布尔值. var o = { a: 1}; console.log(o.hasOwnProperty('a')); // true console.log(o.hasOwnProperty('b')); // false 有一个用hasOwnProperty实现数组去重的方法: var arr = ['a', 'b', 'c', 'b']; function unique

  • java面试题之数组中的逆序对

    题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数 例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}. 看到这个题目,我们的第一反应就是顺序扫描整个数组.每扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小.如果后面的数字比它小,则这两个数字就组成一个逆序对.假设数组中含有n个数字.由于每个数字都要和O(n)个数字做比较,因此这个算法的时间复杂度为

随机推荐