1、请写一个函数实现以下功能:字符串'open_door'转换成'OpenDoor','make_by_id'转换成'MakeById'

function strHandle($str)
{
$return = '';
$arr = explode('_', $str);
foreach ($arr as $val) {
$return .= ucfirst($val);
}
return $return;
}
echo strHandle('open_door');
echo '<hr>';
echo strHandle('make_by_id');

2、使用冒泡进行排序[56,8,170,50,3,1024];

//对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面
$arr=[1,56,8,170,50,3,1024,2];
$arrLengt = count( $arr );
for( $i = 0;$i<$arrLengt-1;$i++ ){//循环比较次数
for( $y = 0;$y<$arrLengt-$i-1;$y++ ){//已经排好的不用再比较
if( $arr[$y] > $arr[$y+1] ){//比较前后两个数据
$temp = $arr[$y];
$arr[$y] = $arr[$y+1];
$arr[$y+1] = $temp;
}
}
}
var_dump( $arr );

3、写一段php代码遍历某个目录下的所有文件和子文件夹

$dir = dirname(__DIR__);
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = my_scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
$files=my_scandir($dir);
var_dump($files);

//树形结构显示

tree(dirname(__DIR__));
function tree($directory)
{
$mydir = dir($directory);
echo "<ul>";
while ($file = $mydir->read()) {
if($file != "."&&$file != ".."){
if (is_dir("$directory/$file")) {
echo "<li style='color:blue'>$file</li>";
tree("$directory/$file");
} else{
echo "<li>$file</li>";
}
} } echo "</ul>";
$mydir->close();
}

4、写一函数获取一个文件夹的大小,并格式化(G、M、K)

$dir = dirname(__DIR__);
echo getRealSize(getDirSize($dir));
function getDirSize($dir)
{
$sizeResult = 0;
$handle = opendir($dir);
while (false !== ($FolderOrFile = readdir($handle))) {
if ($FolderOrFile != "." && $FolderOrFile != "..") {
if (is_dir("$dir/$FolderOrFile")) {
$sizeResult += getDirSize("$dir/$FolderOrFile");
} else {
$sizeResult += filesize("$dir/$FolderOrFile");
}
}
}
closedir($handle);
return $sizeResult;
}
// 单位自动转换函数
function getRealSize($size)
{
$kb = 1024; // Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte
if ($size < $kb) {
return $size . " B";
} else if ($size < $mb) {
return round($size / $kb, 2) . " KB";
} else if ($size < $gb) {
return round($size / $mb, 2) . " MB";
} else if ($size < $tb) {
return round($size / $gb, 2) . " GB";
} else {
return round($size / $tb, 2) . " TB";
}
}

5、使用mysqli函数 写一个更新操作

/**
* @param $table表名
* @param $set更新的数据
* $where 条件
*/
function mysqli_update($table,$set,$where=null){
$link = mysqli_connect( '127.0.0.1','root','root','mydb',3306 ) or die(mysqli_connect_error());
mysqli_set_charset($link,'utf8') or die('设置字符集失败');
if(empty($set)||!is_array($set)){
return '更新失败';
}
$set_str='';
foreach($set as $k=>$v){
$set_str.="`$k`='$v',";
}
$set_str=trim($set_str,',');
$where=trim($where);
if(empty($where)){
$where='1=1';
}
$sql = "UPDATE ".trim($table)." set ".$set_str." WHERE ".$where;
mysqli_query( $link,$sql );
return mysqli_affected_rows($link);
}
echo mysqli_update('test',['username'=>'aaa','phone'=>123456],'id=4');

6、写个函数用来对二维数组排序

$data = [

['key1'=>940,'key2'=>'blah'],

['key1'=>23,'key2'=>'this'],

['key1'=>894,'key2'=>'that']

];

比如以key1排序

方法一:
$data = [
['key1'=>940,'key2'=>'blah'],
['key1'=>23,'key2'=>'this'],
['key1'=>894,'key2'=>'that']
];
foreach ($data as $key=>$value){
$key1[$key] = $value['key1'];
$key2[$key] = $value['key2'];
}
array_multisort($key1,SORT_NUMERIC,SORT_DESC,$key2,SORT_STRING,SORT_ASC,$data);
var_dump($data);
方法二:
$data = [
['key1'=>940,'key2'=>'blah'],
['key1'=>23,'key2'=>'this'],
['key1'=>894,'key2'=>'that']
];
function mySort($arr,$key){
$arr = array_column($arr,null,$key);
ksort($arr);
return $arr;
}
var_dump(mySort($data,'key2'));

方法三:

$data = [
['key1'=>940,'key2'=>'blah'],
['key1'=>23,'key2'=>'this'],
['key1'=>894,'key2'=>'that']
];
function myArraySort($data,$key,$desc=true,$scale=2){
if(empty($data)){
return $data;
}
usort($data, function($a, $b) use ($key,$desc,$scale) {
if($desc){
return bccomp($b[$key],$a[$key],$scale);
}
return bccomp($a[$key],$b[$key],$scale);
});
return $data;
}
var_dump(myArraySort($data,'key2'));

7、不用PHP内置函数 写一个字符串反转函数 hello=》olleh

$str = 'hello,你好!';
function str( $str = '' ){
$strlen=mb_strlen($str);//针对中文字符
$rev = '';
for($j=$strlen-1; $j>=0; $j--){
$rev .=mb_substr($str,$j,1);
}
return $rev;
}
echo str( $str );

8、使用五种以上方式获取一个文件的扩展名(后缀名)

$file_name='php.exc.tee';
echo get_ext4($file_name);
function get_ext1($file_name)
{
return substr(strrchr($file_name, '.'),1);
} //2)
function get_ext2($file_name)
{
return strrpos($file_name, '.')===false?'':substr($file_name, strrpos($file_name, '.')+1);
} //3)
function get_ext3($file_name)
{
return array_pop(explode('.', $file_name));
} //4)推荐
function get_ext4($file_name)
{
return pathinfo($file_name,PATHINFO_EXTENSION );
} //5)
function get_ext5($file_name)
{
$str = strrev($file_name);
return strrev(strchr($str,'.',true));
}

9、有一个字符串 $str= 'a,b,c,d'。请手写函数把','去掉

$str= 'a,b,c,d';
echo str_handle($str);
function str_handle($str){
return join('',explode(',', $str));//方法1
return str_replace(',', '', $str);//方法2
return preg_replace('/\,/', '', $str);//方法3
}
//使用for循环
function for_handle($str,$filter=','){
$len=strlen($str);
$new_str='';
for($i=0;$i<$len;$i++){
if($str[$i]!=$filter) $new_str.=$str[$i];
}
return $new_str;
}

10、输出100以内的质数

for( $i=2;$i<100;$i++ ){
$make = false;
$sq=sqrt($i);//只用计算到平方根就好,不用计算那么多次
for( $j=2;$j<=$sq;$j++ ){
if( $i%$j == 0 ){
$make = true;
break;
}
}
if( $make )continue;
echo $i.'<br/>';
}

11、使用PHP语言自定义一个函数,此函数作用是将一个句子按单词反序。例如One World One Dream,反序后变为 Dream One World One

$str = 'One World One Dream';
function mysort( $str = '' )
{
$strArr = explode(' ',$str );//先分割成数组
$strArr=array_reverse( $strArr );//数组倒转
return implode( ' ',$strArr );//数组连接成字符串
}
var_dump( mysort( $str ) );

12、判断字符串’aAbB’中有没有A字符

$str="AabB";
if( ($index=strpos($str,"A"))===false ){//注意用全等
echo '没有A这个字符';
}else{
echo 'A字符在第'.($index+1).'个';
}

13、如何快速提取URL中的域名?如下"http://www.baidu.com/index.php?id=12&act=index",如何快速提取"www.baidu.com"

$Url='http://www.baidu.com/index.php?id=12&act=index';
echo parse_url($Url,PHP_URL_HOST );

14、用PHP写一段代码,实现不使用第3个变量,交换$a,$b的值,$a,$b的初始值自己定

$a =100;
$b =200;
$a = $a+$b;
$b = $a-$b;
$a = $a-$b;
echo "{$a},{$b}";

使用list()函数

$a = 1;
$b = 2;
list( $b,$a ) = [$a,$b];
echo $a,$b;

15、一列数的规则如下:1、1、2、3、5、8、13、21、34... 求第30位数是多少,用递归算法实现

echo fibo(30);
function fibo($n){
if( $n==1||$n==2 ){
return 1;
}
return fibo($n-2)+fibo($n-1);
}

16、如何查看一个单词,在一篇文章里出现的次数

$str = 'qwertqwertqwert';
echo substr_count( $str,'q' );//自带函数
echo preg_match_all('/q/',$str,$preg_arr);//用正则

17、打印出当前时间的前两天的时间格式,考察:【时间日期】

//方法一
$nowTime = time() - (2 * 24 * 60 * 60);
$date = date( 'Y m d h i s',$nowTime );
echo $date;
//方法二
$date = date( 'Y m d H i s',strtotime( '-2 day' ) );
var_dump( $date );

18、求两个日期的差数,例如2018-2-5 ~ 2018-3-6的日期差数

$begin = strtotime('2018-2-5');
$end = strtotime('2018-3-6');
echo ($end-$begin)/(24*3600);

19、用正则表达式判断$a是否是一个以半角逗号分隔的多个手机号码组成的字符串,是输出yes

考察:【正则表达式】

//* 匹配0个或者多个
//+ 匹配1个或者多个
//?匹配0个或者1个 $phone='15898561259,12898561259,12898518259';
$match = '/^1[23456789]\d{9}(,1[23456789]\d{9},*)+$/';
if (preg_match($match, $phone) ) {
echo 'yes';
}else{
echo 'no';
}

20、请写一段PHP代码,确保多个进程同时写入同一个文件成功

考察:【文件锁】

function writeData($filepath, $data)
{
$fp = fopen($filepath,'a');
do{
usleep(100);
}while (!flock($fp, LOCK_EX)); $res = fwrite($fp, $data."\n");
flock($fp, LOCK_UN);
fclose($fp);
return $res;
}

21、有一个网页地址,比如PHP研究室主页http://www.phpv.net/index.html,如何得到它的内容?

  1. 直接读取文件
$fh= file_get_contents('http://www.phpv.net/index.html');
echo $fh;
  1. 使用curl
$url = "http://www.phpv.net/index.html";
echo curl($url);
/**
* 请求接口返回内容
* @param string $url [请求的URL地址]
* @param string $params [请求的参数]
* @param int $ipost [是否采用POST形式]
* @return string
*/
function curl($url,$params=false,$ispost=0){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if( $ispost )
{
curl_setopt( $ch , CURLOPT_POST , true );
curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt( $ch , CURLOPT_URL , $url );
}
else
{
if($params){
curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
}else{
curl_setopt( $ch , CURLOPT_URL , $url);
}
}
$response = curl_exec( $ch );
if ($response === FALSE) {
//echo "cURL Error: " . curl_error($ch);
return false;
}
curl_close( $ch );
return $response;
}

22、写出以下代码输出

考察:【数据类型】数据类型转换函数

$a = 'www';
settype($a,'array'); //['www']
(string)$a; //'Array' 数组转化为'Array',对象转化为'Object'
floatval($a); //['www']=>1 float
echo gettype($a); //array

23、请输出下面程序的输出结果

考察:【运算符】逻辑运算符的短路

$a = 3;
$b = 6;
if( $a=5 || $b=7 ){ // '||'优先级高于'=',相当于$a=(5||$b=7),返回true
$a++; // 递增/递减运算符不影响布尔值,递减 NULL 值也没有效果,但是递增 NULL的结果是 1。
$b++; //7
}
var_dump($a,$b); //bool(true) int(7)

24. 下面输出的结果是什么___1_____。

考察:【函数】静态变量

$count = 5;
function get_count()
{
static $count = 0;
return $count++;
}
++$count; //6
get_count(); //$count=1
echo get_count(); //return 1++

25. 下面代码输出的结果是什么____2____。

$a = count("567") + count(null) + count(false);
echo $a; //count()如果参数既不是数组,也不是实现 Countable 接口的对象,将返回1。如果是 NULL 则结果是 0。

26、请找出下面代码中的问题,修复并优化

//批量注册用户,每次>100个。
//注册新用户,要求用户名与email不能与以前的重复。
$mysqli = new Mysqli($host, $user, $pass);
for ($i=0; $i<count($_POST['user_info']); $i++) {
$info = $_POST['user_info'][$i]; $re_1 = $mysqli->query("SELECT * FROM `demo` WHERE `uname`='{$info['uname']}'");
$re_2 = $mysqli->query("SELECT * FROM `demo` WHERE `email`=$info['email']"); if (!($re_1 || $re_2)) {
$mysqli->query("INSERT INTO `demo` (`uname`, `email`) VALUES('$info['email']', '$info['uname']')");
}
} 1 $re_2查询字符串条件 变量+花括号
2 连接数据库,没有指定数据库名称
3 没有判断是否连接成功
4 没有开启事务
5 没有使用sql优化 select `id` from `demo` where `uname` = '{$info['uname']}' or email = '{$info['email']}';
6 插入字段没有对应
7 循环数据的时候没有判断数据的正确性isset( $_post['user_info'] )
9 插入更新删除一定要判断影响行数$mysqli->affected_rows()
10 没有开启错误日志
11 没有关闭数据库$mysqli->close()
12 count($_POST['user_info']) 没有向外提取,多次计算
13 数据插入数据库没有进行数据校验
14 判断应该为if( $re && $re->num_rows > 0 )

PHP基础题目的更多相关文章

  1. java基础题目总结

    有些基础题目由于工作中用的比较少但却又是不可少的,这样回答起来就会反应慢,不确定,不准确,特此开了文章记录遇到的不确定或者回答比较拗口的问题. 1.servlet是单例的吗,是安全的吗,是多线程吗 s ...

  2. iOS 面试基础题目

    转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...

  3. Problem C: 动态规划基础题目之数字三角形

    Problem C: 动态规划基础题目之数字三角形 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 208  Solved: 139[Submit][Sta ...

  4. uva11292贪心基础题目

    C - 贪心 基础 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bi ...

  5. sql基础题目测试及正确答案

    在网上做了一套基本的sql题目,以下是我的写的答案,适合基础人员练练 --创建测试数据 use test create table Student(S# varchar(10),Sname nvarc ...

  6. 二叉树的基础题目学习(EPI)

    1.判断是个二叉树是不是平衡二叉树. 二叉树的定义都是利用递归的方法,所以二叉树有着天然的递归属性.所以一般情况下,递归解决二叉树问题中,递归解法比较简洁.平衡二叉树的定义是左子树和右子树均是平衡二叉 ...

  7. 数组和字符串的基础题目学习(EPI)

    学习的速度有些慢,脑袋转动的频率有些不是很高.不过今天的效率我觉得还是可以,应该不能称效率吧,就是整个感觉不错,感觉自己补充了很多的知识.其实G家和F家败了之后不知道看看算法题对接下来的找工作帮助是否 ...

  8. 全网求解,用Python处理一个基础题目

    昨天在群里看见一个Python的问题,趁着今天有那么一点点时间,就想把这个题目分享出来,让大家一起解决.毕竟三个臭皮匠,赛过诸葛亮.原始数据如下: 1 origin_lst = [0, 0, 1, 2 ...

  9. 堆的基础题目学习(EPI)

    堆的应用范围也比较广泛,经常游走在各种面试题目之前,不论算法设计的题目还是海量数据处理的题目,经常能看到这种数据结构的身影.堆其实就是一个完全二叉树的结构,经常利用数组来实现.包含最大堆和最小堆两种. ...

  10. hdoj 1269 迷宫城堡【scc基础题目】

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. 在wsl2 kali发行版中安装docker

    前言 因为不想开虚拟机,而又需要多个linux发行版来做测试,也不想使用docker-desktop来曲线救国,所以想直接安装个docker随时使用,这一路也是踩了不少坑.直接复制进终端进行安装 su ...

  2. 《3D编程模式》写书-第5次记录

    大家好,这段时间我完成了对初稿的第一轮修改,即将开始第二轮的修改 这里是所有的的写书记录: <3D编程模式>写书记录 本轮修改主要进行了下面的修改: 修改错误 修改了UML错误.文字错误. ...

  3. package.json文件中版本号

    "5.0.3"表示安装指定的5.0.3版本,"-5.0.3"表示安装5.0.X中最新的版本,"^5.0.3"表示安装5.X.X中最新的版本.

  4. java项目实战-mybatis-基本配置01-day22

    目录 0. mysql navicate链接分享 1. mvn坐标引入 2. mysql的核心配置文件 3. 返回值类型 别名 4. 将数据的配置提取配置文件 4. log4j修改日志输出 0. my ...

  5. 通过dockerfile构建微服务的镜像发布

    本文为博主原创,未经允许不得转载: 目录: 1. dockerfile 的文件使用讲解 2. dockerfile 常用指令 3. 通过dockerfile 进行微服务发布 1. dockerfile ...

  6. 05-逻辑仿真工具VCS-执行过程

    Verilog Simulation Event Queue 主要了解VCS是如何处理交给它的代码的 Verilog的仿真事件队列,介绍VCS如何处理交给它的代码.VCS是Synopsys公司的,支持 ...

  7. 使用VS开发人员工具观察类在内存中的布局

    1.先要生成相应文件 2.打开VS2019开发人员工具 3.cd至文件目录 4.输入cl /d1 reportSingleClassLayoutanimal demo.cpp 其中reportSing ...

  8. JMS微服务开发示例(四)把配置文件appsettings.json 部署在网关,共享给其他相同的微服务

    通常,多个相同的微服务器,它们的appsettings.json配置文件的内容都是一样的,如果,每次修改配置文件,都要逐个替换,那就太繁琐了,我们可以利用网关的文件共享功能,实现配置文件的统一更新. ...

  9. Redis内存问题的学习之一

    Redis内存问题的学习之一 背景 前几天帮同事看redis的问题 发现info memory 显示 60GB 但是实际上 save出来的dump文件只有 800M 然后导入到其他的redis之后, ...

  10. [转帖]配置cri-docker使kubernetes1.24以docker作为运行时

    从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作 ...