标签(空格分隔): Driphp
##NO.16 如何在数组的任意位置插入新元素? ###问题描述 这个问题有好几种解决办法,主要是考验对数组函数的灵活掌握能力,也是基本功了~ 如:
INPUT:$arr=['a','b','c','d','e'];//(要求在d的前面插入x)
OUTPUT:$arr=['a','b','c','x','d','e'];
###解决办法
1、使用array_splice()[推荐]
<?php
$arr = array( 'a', 'b', 'c', 'd', 'e' );
$inserted = array( 'x' );
array_splice( $arr, 3, 0, $inserted );
print_r($arr);
2、使用array_merge()、array_slice()进行组合。
<?php
$arr1=['a','b','c','d','e'];
$arr=array_merge(array_slice($arr1,0,3),['x'],array_slice($arr1,3));
print_r($arr);
##NO.17 如何获取今日、昨日、上周、本月的起始时间戳和结束时间戳? ###问题描述 获取特定时间段的时间戳,开发中经常用到,很实用。 ###解决办法 ####NO.1使用mktime()
<?php
//php获取今日开始时间戳和结束时间戳
$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));
$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
//php获取昨日起始时间戳和结束时间戳
$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
$endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
//php获取上周起始时间戳和结束时间戳
$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
$endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
//php获取本月起始时间戳和结束时间戳
$beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
$endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));
####NO.2使用Carbon
Carbon是第三方的很好用的一个时间类库。很灵活、好用。
比如,获得一天的开始、结束时间戳:
<?php
$startDay = Carbon::createFromTimestamp(time())->startOfDay();
$endDay = Carbon::createFromTimestamp(time())->endOfDay();
[Carbon官网][1] ##NO.18 青蛙跳台阶问题 ###问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法? ###解决办法 对于第n个台阶来说,只能从n-1或者n-2的台阶跳上来,所以 F(n) = F(n-1) + F(n-2)(也就是斐波拉契数序列)
<?php
function jumpFloor($number){
if($number<=0) return 0;
if($number==1) return 1;
if($number==2) return 2;
return jumpFloor($number-1)+jumpFloor($number-2);
}
##NO.19 Mysql如何按指定字段自定义排序? ###问题描述: 一张表中有一个字段status:值为1、3、5、7 升序排列:order by status ASC 降序排列:order by status DESC 现在我想按照自定义规则:3、5、1、7 进行排序。如何做到呢? ###解决办法 使用PHP的ORDER BY FIELD 按字段排序语法。
order by FIELD(`status`,3,5,1,7)
建议:逻辑处理最好还是在php、java等语言端做,mysql专注于存储。这样效率会更高一些,特别是对于数据量大的场景。
##NO.20 猴王问题 ###问题描述 有一群猴子排成一圈,按1,2,...,n依次编号。 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,再把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。
要求:编程模拟此过程,输入m、n, 输出最后那个大王的编号。
###解决办法 ####NO.1使用约瑟夫环递推公式(推荐)
<?php
function yuesefu($n,$m){
$next = 0;
for($i=2;$i<=$n;$i++){
$next = ($next+$m)%$i;
echo $next;
}
return $next+1;
}
echo yuesefu(5,2);
####NO.2 使用数组
function getKingMonkey($n,$m){
$monkey=range(1,$n); //构建猴子数组
$i=0;
//遍历猴子数组
while( list($k,$value)=each($monkey)){
if(count($monkey)==1){
echo $value. "是猴王";
exit();
}
if(++$i==$m){
echo $monkey[$k].'踢出去'.'<br/>';
unset($monkey[$k]); //把变量 清除
$i=0; //指针归位
}
//如果已经数到最后的话 则继续进行下一轮的循环
if(!current($monkey)){
reset($monkey);
}
}
}