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

Posted by & filed under 每日一题.

【四脚猫】每日一题(5月23日): 已知数组items的数据如下:

1
$items=[1,1,3,4,6,7,8,11,234,4234,567,568,569];

用PHP如何获取数组中所有连续出现3个的数,如: [6,7,8], [567,568,569] ,给出你的实现代码

以下是一种比较简单的实现方式:

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

$items=[1,1,3];
$count=count($items);
if($count<3) return;
for($i=0;$i<=$count-3; $i++){
    $step1=$items[$i+1] - $items[$i];
    $step2=$items[$i+2] - $items[$i+1];
    if ( (1== $step1) && (1==$step2) ) {
        echo $items[$i] , "," , $items[$i+1] , "," ,$items[$i+2] , "\n";
    }
}

Posted by & filed under 每日一题.

【四脚猫】每日一题(5月21日):试试用JS来复制页面上的文本,尽可能兼容firefox、chrome、ie等浏览器

方法1:只有IE浏览器支持用JS复制内容,其他现代浏览器为了安全方面的考虑,禁止JS操作剪切板,所以只能是JS + Flash的方案。

方法2:给用户一个选中文本的效果,提示用户复制

Posted by & filed under 每日一题.

【四脚猫】每日一题(5月19日): 用curl模拟http请求获取网页 http://news.baidu.com/ 的内容 ,然后分析打印这个网页里面的所有链接地址。

asun 用正则回调实现了这个功能,error_log这个用法大家可以去了解下具体参数

1
2
3
4
5
6
7
8
9
10
11
12
13
将解析得到的url写入一个文件中
$url = 'http://news.baidu.com/';
$str = file_get_contents($url);
preg_replace_callback("#(.*?href=\")(.*?)(\".*?)#i", 'getUrl', $str);

function getUrl($matches)
{
  if (strpos($matches [2] , 'javascript') === false && strpos($matches [2] , '#') === false)
  {
    $url = $matches [2] ."\r\n";
    error_log($url,3,dirname(__FILE__).'/url.txt');
  }
}

Zjmainstay提供的版本:

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

$url = 'http://news.baidu.com/';
$content = file_get_contents($url);

$linkPattern = '#<a[^>]*?href="([^"]*?)"[^>]*?>(.*?)</a>#is'; //<a && href=" && " && > && </a> 是锚点
if(preg_match_all($linkPattern, $content, $matches)) {
  $links = array();
  foreach($matches[ 0 ] as $key => $linkTag) {
    $links[$matches[ 1 ][$key]] = htmlspecialchars($matches[ 2 ][$key]);
  }
}
echo '<pre>';
print_r($links);

//End_php

以下是黄亚彬提供的正宗的curl方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
/**
** 抓取百度新闻链接
** @author:hyb(76788424@qq.com)
** @date:2014.05.19
**/

function getNews(){

$url = 'http://news.baidu.com/';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

//获取文件流
$re = curl_exec($ch);
//关闭curl
curl_close($ch);

//转码为utf-8
if($re === FALSE){ //无结果
$result = null;
return $result;
}else{
if(json_encode($re) == 'null'){
$res = iconv('GB2312','UTF-8//IGNORE',$re);
}else{
$res = $re;
}
}

//正则获取超链
$str = '#<a.*?href="(http://.*?)".*?>(.*?)</a>#is';
preg_match_all($str,$res,$href);
if(!isset($href [1] )||!isset($href [2] )){
return $result = null;
}else{
for($i=0;$i<count($href [1] );$i++){
$result[$i]['href'] = $href [1] [$i];
if(empty($href [2] [$i])){
$result[$i]['name'] = 'default';
}else{
$result[$i]['name'] = $href [2] [$i];
}
}
}
echo '&nbsp;&nbsp;共有<font color="red">'.count($href [1] ).'</font>条超链:<br/>';
foreach($result as $k=>$v){
echo '第'.$k.'条==><a href ='.$v['href'].' target="_blank">'.$v['name'].'-----------('.$v['href'].')</a><br/>';
}
return $result;
}

/**test**/
getNews();
/**tese**/

Posted by & filed under 每日一题.

【四脚猫】每日一题(5月15日): 用PHP实现二分查找算法,给定的数组[1, 2, 4, 6, 8, 20, 22],采用二分查找法,找出4的位置,并打印出位置和查找次数。

以下是 吃大蒜的猪 的版本,比较通俗易懂!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function binSearch($arr, $val, &$times) {
$low = $times = 0;
$high = count($arr) - 1;
while($low <= $high) {
$mid = (int)(($low+$high) / 2);
if($arr[$mid] > $val) {
$high = $mid - 1;
++$times;
} elseif ($arr[$mid] < $val) {
$low = $mid + 1;
++$times;
} else {
return $mid;
}
}
}
$arr = array(1, 2, 4, 6, 8, 20, 22,44,55,66);
$key = binSearch($arr, 21, $times);
echo $key !== NULL ? 'positon->'.$key.' times->'.$times : 'no fond';

Posted by & filed under 每日一题.

【四脚猫】每日一题(5月14日): 有些网站其实就是个壳,他们采用iframe技术,把你的优质内容嵌入进去,而且不告诉用户这个网页真实的来源。你有什么办法可以阻止这个行为?

three提交的答案:

1
2
3
4
<script type="text/javascript">
if (window!=top) // 判断当前的window对象是否是top对象
top.location.href =window.location.href; // 如果不是,将top对象的网址自动导向被嵌入网页的网址
</script>