PHP 基础面试题整理

每次找工作前总要刷一些面试题,今天自己索性也记录一下,以后不定期更新,如果大家有觉得比较好的题目可以私我~

1. 中文字符串截取无乱码的方法

// 1. 通过内置函数
mb_substr();
// 2. 自定义方法(不建议在很长的中文字符串用到,因为效率不高)
function selfSubstr($string, $start, $length = null)
{
    return implode('', array_slice(
        preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY), $start, $length)
    );
}

2. 写出下列程序的输出结果

// 计算过程是先计算乘法,再取余,最后通过三目运算符输出结果(当然题目只是题目,在业务代码用硬编码的方式写下这样不够一目了然的表达式会让别人很头疼的)
$result = 87 % 7 * 16 > 87 ? 1 : 0; // 结果为0

3. 有三个php 文件位于同一目录下,内容如下所示,使用浏览器访问c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果,如果不存在问题,请写出浏览器查看效果

A.php:
<?php
function fa()
{
    echo "in Function A\n";
}
?>

B.php:
<?php
include 'a.php';

function fb({
    echo "in Function B\n";
}
?>

C.php:
<?php
include 'a.php';
include 'b.php';

fa();
fb();
?>

// 结果肯定是存在问题,a.php 被包含了两次,导致fa()函数重复定义,引用文件时应该使用include_once 避免重复包含。
// 写业务代码时要坚决避免这种A调用B,B又调用C,然后A还使用者C里面方法的写法

4. 打印出前一天的时间,格式是2020-03-10 21:21:21

<?php

echo date('Y-m-d H:i:s', time() - 3600 * 24);
// 或者
echo date('Y-m-d H:i:s', strtotime('-1 day'));

5. 不使用第三个变量交换两个变量的值

<?php
// 如果小伙伴们遇到这个问题一定要问一下,数据类型是什么,因为不同的数据类型会有不同的解法
// 一、通用解法:只要数据类型是标量的类型,都可以使用list方法结合array实现
$a = "a"; // 1; 6.6; true;
$b = "b"; // 2; 8.8; false;
list($b, $a) = array($a, $b);
//------------------------------------------------------------------
// 二、只适用于字符串和整型
// 使用异或能交换两个变量的值是因为:
// 程序进行异或运算的时候会先把变量的值转换成二进制的字节码,两个字节码之间进行异或运算,一真即为真,同真假为假,并且拿着异或之后的结果与其中一个变量的字节码再进行异或运算,就会得到另一个变量的字节码,利用这个原理就可以进行交换两个变量的值,如下:
// 假如$a的字节码是1001,$b的字节码是1100,$a ^ $b 结果为 0101
// 然后得到异或的结果之后先与$b的字节码进行异或(即0101 ^ 1100),异或的过程会把$b的字节码抵消掉,结果为1001,即$a的字节码
// 最后用第一次的异或结果与第二次的异或结果再进行一次异或运算(即0101 ^ 1001),异或的过程会把$a的字节码抵消掉,结果为1100,即$b的字节码
$a = 'a'; // 1;
$b = 'b'; // 2;
$a = $a ^ $b;
$b = $b ^ $a;
$a = $a ^ $b;
//------------------------------------------------------------------
//三、只适用于数字
$a = 6;
$b = 8;
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
var_dump($a);
var_dump($b);

6. 将1234567890 转换成1,234,567,890 每3 位用逗号隔开的形式

<?php
// 1. 简单粗暴的循环
function addSplitCharacter($str)
{
    if (empty($str)) {
        return false;
    }

    $filpStr = '';
    $countNum = 0;
    $splitIndex = 3;
    $strlength = strlen($str);
    for ($index = $strlength - 1; $index >= 0; $index--) {
        $filpStr .= $str[$index];
        $countNum++;
        if ($countNum == $splitIndex) {
            $filpStr .= ',';
            $countNum = 0;
        }
    }

    return strrev($filpStr);
}
// 2. 运用内置函数
function addSplitCharacter($str)
{
    if (empty($str)) {
        return false;
    }

    $filpStr = strrev($str);
    $filpStr = chunk_split($filpStr, 3, ',');
    $filpStr = strrev($filpStr);
    $filpStr = ltrim($filpStr, ',');
    return $filpStr;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!