如无特别说明,以下题目均可用各种技术方案来解答。

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月18日): 很多程序用下面这段代码来判断:

1
2
3
if (strtoupper($_SERVER['HTTPS']) == 'ON') {
   // ...
}

但是很多服务器压根就没发送HTTPS这个头给php-fpm啊?到底应该怎么做才准呢?

参考答案:

1
2
3
4
5
6
7
8
9
10
11
function is_HTTPS(){  
    if(!isset($_SERVER['HTTPS']))  return FALSE;  
    if($_SERVER['HTTPS'] === 1){  //Apache  
        return TRUE;  
    }elseif($_SERVER['HTTPS'] === 'on'){ //IIS  
        return TRUE;  
    }elseif($_SERVER['SERVER_PORT'] == 443){ //其他  
        return TRUE;  
    }  
    return FALSE;  
}

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月17日):完善以下PHP代码中的insertAt函数,实现在数组$items的任意位置插入数据 ,实现在数组$items的任意位置插入数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$items= ['苹果','橘子','梨','菠萝','香蕉','火龙果'] ;

/*
$items 传入的数组
$index 要插入的位置
$value 要插入的数据
*/

function insertAt($items, $index, $value) {

return $items;
}

$items=insertAt($items, 2 , '橙子'); //执行完成后,得到的结果如下
['苹果','橘子','橙子','梨','菠萝','香蕉','火龙果'] ;

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月16日): 一个JS面试题,如何理解?

1
2
3
4
5
6
7
8
9
10
11
 var tt = 'aa';  

 function test(){

       alert(tt);
       var tt = 'dd';
       alert(tt);    

       }  

  test();

为什么第一个弹出undifine呢?

以下是云袭提供的参考答案:

js 作用域提升 术语是 hoisting
所以在 test 函数中实际执行的是
var tt;
alert(tt);
tt = ‘dd’
alert(tt)
所以第一个是 undefined
但是hoisting 不改变赋值,所以最终还是会输出变量的值

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月13日): 用PHP将 545562587450 变成 545,562,587,450 ,怎么实现更好?

本题解法种类太多,number_format 固然是简单,但是其它解法对于字符串的分割和格式化,也能给我们很好的参考

wakaka提供的答案,chunk_split将字符串分割成小块(补充下把最后的逗号去掉就符合题意了)

1
chunk_split($str, 3, ',');

jianxun采用preg_replace_callback 正则回调也很是巧妙!

1
2
3
echo preg_replace_callback("|(\d{3})(\d{3})(\d{3})(\d{3})|",
function ($m){  return $m [1] .",".$m [2] .",".$m [3] .",".$m [4] ; },
"545562587450");

wawa采用str_split来把字符串分割为数组,这个函数也是需要我们记忆的,字符串相关算法常用这个

1
2
3
4
5
6
7
8
$num=545562587450;

$str=str_split($num,3);
$strs='';
for ($i=0; $i < count($str); $i++) {
$strs.=$str[$i].',';
}
echo rtrim($strs,',');

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月12日):有如下PHP的二维数组:

 

数组如上,如何对每组数组中的delivery_time 和 create_time键使用Date函数,得出结果如下:

 

参考答案:(主要是array_map的灵活运用)

 

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月11日): 实现一个函数 IsSum 判断一个数是不是连续自然数的和(要求从1开始的连续自然数) ,如果是返回true 否则返回 false。
例如:

1
2
3
isSum(3) =true   // 3=1+2
isSum(10) = true // 10 = 1 + 2 + 3 + 4,
isSum(4) = false

asun提供的解法:

1
2
3
4
5
6
7
8
9
10
11
12
function isSum($num){
$return = false;
for ($i=1;$num>0;$i++){
$num -=$i;
if ($num == 0){
$return = true;
break;
}
}
return $return;
}
var_dump(isSum(5050));

zzctmac提供的解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
利用(比如num=5050)(1+n)*n/2=5050 公式,如果数满足要求,那么一定有一个相应的n,通过代码计算是否存在n即可知道数满不满足要求
*/

function isSum($num){
 $num *= 2;
 for($i = 1; $i < sqrt($num); $i++) {
   $test_num = $i * $i + $i;
   if($test_num < $num) {
   continue;
  }
  elseif($test_num == $num) {
    return true;
  }  else {
   return false;
  }
 }
}

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月10日):一个房间里有50个人,那么至少有两个人生日相同的概率是多少?(忽略闰年的事实,也就是一年365天)。使编程计算出来,并说明思路。

以下是zzctmac参考答案:

1
2
3
4
5
6
7
8
9
10
<?php

function step($num, $time = 50) {
if($time >= 1) {
return $num * step($num-1, $time -1);
} else {
return 1;
}
}
echo 1- step(365) / pow(365, 50);

解题思路:
设每个人的生日在一年365天中的任意一天是等可能的.都等于1/365,那么选取n个人,他们生日各不相同的概率为365*364*363….(365-n+1)/365的n次方.因而,n个人中至少有两人生日相同的概率为p=1-365*364*363….(365-n+1)/365的n次方. 这里给n的值是50,代入化算得简概率为p=0.970

Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月09日): 如下URL地址:

1
$url='http://bbs.sijiaomao.com/read.php?tid=942&fid=22';

如何快速提取URL中的域名: “bbs.sijiaomao.com” ?

看谁的方法又快又稳定?

最佳答案:

1
echo parse_url($url, PHP_URL_HOST);

parse_url是个非常有用的解析url的函数,除了可以提取域名,还可以提取端口,查询参数等各种url中的数据。
详情参考PHP官方手册。