一亿条数据读取

贼他妈1e8的数据,以longlong写在txt里有970M,以String读进内存要5G。鲍宏晖用python写读文件,结果全读进内存里了,虚拟机果断爆炸,还好我mac有16G内存,不然也GG。还是php加指针大法好啊,真是好,一次读一行,二分查找,毫秒级出结果。

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html>
<html>
<head>
<title>
PHP Testing
</title>
</head>
<body>
<h1>我的PHP测试</h1>
<form action="ReadFile.php" method="post">
要查询的qq号: <input type="text" name="number"><br>
<input type="submit">
<?php
function puts(){
echo '</br>';
}
$file = fopen("Out1.txt","r");
function _goback(&$mid){
global $file , $example;
do{
$mid--;
fseek($file,$mid);
$value = fgetc($file);
}while($value != "\n");
$mid++;
if($mid<0){
$mid=0;
}
}
function debug($up , $down , $mid){
echo 'up = '."$up".'</br>';
echo 'down = '."$down".'</br>';
echo 'final mid = '."$mid".'</br>';
echo "---------------".'</br>';
}
function binary_find( $up , $down , $value ){
global $file;
if($down<$up)return -1;
$mid = intval(($up + $down)/2);
echo "early mid = ".$mid.'</br>';
_goback($mid);
fseek($file,$mid);
$tmp = intval(fgets($file));
debug($up,$down,$mid);
if($mid>=$down)return -1;
if($tmp==$value){
return intval($mid);
}else if($tmp>$value){
return binary_find($up , $mid , $value);
}else {
return binary_find($mid , $down , $value);
}
}
$line=-1;
if($_POST["number"]>0){
$line = binary_find(0,975310059,intval($_POST["number"]));
}
if($line == -1){
echo "没有这个QQ号".'</br>';
}else{
echo "这个QQ号在文件第".$line."个字节处".'</br>';
}
?>
</body>
</html>

Sort

用php写了冒泡排序、shell排序、快速排序

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
$origin=array(9,2,3,1,4,7,6,8,5);
var_dump($origin);echo '</br>';
//输出函数
function BeautifulPrint($origin){
$size = count($origin);
for ($i=0; $i <$size ; $i++) {
echo $origin[$i].' ';
}echo '</br>--------!!!-------</br>';
}
//交换函数
function swap(&$a,&$b){
$tmp=$a;$a=$b;$b=$tmp;
}
//冒泡排序
function popSort($origin,$order){
//$order = true 升序 false降序
$size = count($origin);
for ($i=$size-1; $i >= 0; $i--) {
for ($j=$size-1; $j >=$size-$i ; $j--) {
if($origin[$j]<$origin[$j-1]){
swap($origin[$j],$origin[$j-1]);
}
}
}
return $order?$origin:array_reverse($origin);
}
echo 'PopSort 升序'.'</br>';
$tmp = popSort($origin,true);
BeautifulPrint($tmp);
$tmp = popSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);
//快速排序
function quickSort($origin,$order){
//$order = true 升序 false降序
do_quickSort($origin,0,count($origin)-1);
return $order?$origin:array_reverse($origin);
}
function partition(&$origin,$low,$high){
$target_value=$origin[$low];
$i=$low;$j=$high;
while($i<$j){
while($i<$j and $origin[$j]>=$target_value)$j--;
if($i<$j){
$origin[$i]=$origin[$j];
$i++;
}
while($i<$j and $origin[$i]<=$target_value)$i++;
if($i<$j){
$origin[$j]=$origin[$i];
$j--;
}
}
$origin[$i] = $target_value;
return $i;
}
function do_quickSort(&$origin,$low,$high){
if($low<$high){
$mid=partition($origin,$low,$high);
do_quickSort($origin,$low,$mid-1);
do_quickSort($origin,$mid+1,$high);
}
}
echo 'QuickSort 升序'.'</br>';
$tmp = quickSort($origin,true);
BeautifulPrint($tmp);
$tmp = quickSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);
//Shell排序
function shellSort($origin,$order){
$size = count($origin);
$gap=-1;$i=-1;$j=-1;$tmp=-1;
for ($gap=$size/2; $gap>0 ; $gap/=2){
for ($i=$gap; $i < $size ; $i++) {
for ($j=$i-$gap; $j >=0 and $origin[$j]>$origin[$j+$gap] ; $j-=$gap) {
swap($origin[$j],$origin[$i]);
}
}
}
return $order?$origin:array_reverse($origin);
}
echo 'ShellSort 升序'.'</br>';
$tmp = shellSort($origin,true);
BeautifulPrint($tmp);
$tmp = shellSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);

删除图片

给定一个目录,该目录下有很多种类的文件和子目录,子目录又有子目录……子子孙孙无穷尽。要删除该目录及其子目录之下所有图片文件,并且写log记录。

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
<?php
$homedir = "/Users/不告诉你/Desktop/不告诉你/不告诉你/不告诉你";
function judge_pic($files_name){
if(preg_match('/\.(jpg|gif|png)$/i',$files_name)!=NULL){
return true;
}else return false;
}
function w_log($filepath){
if (file_exists($filepath)) {
$file = readdir($filepath);
$logstring = "Deleted $filepath: filetype: ".filetype($filepath.$file)."\n";
unlink($filepath);
} else {
$logstring = "Failed to delete $filepath\n";
}
$fp = fopen("/Users/不告诉你/Desktop/不告诉你/不告诉你/不告诉你/filedelete.log", "a");
fwrite ($fp, $logstring);
fclose($fp);
}
function delete_all_pic($dir){
$my_files = scandir($dir);
if(my_files!=false){
foreach ($my_files as $one_file) {
if(is_dir("$dir/$one_file") and $one_file!='.' and $one_file!='..' ){
delete_all_pic("$dir/$one_file");
}
else if (!is_dir("$dir/$one_file")and $one_file!='.DS_Store'){
if(judge_pic("$dir/$one_file")){
w_log("$dir/$one_file");
}
}
}
}
}
delete_all_pic($homedir);

PHP连接数据库

生成10位a-z,0-9组成的id,去重后插到数据库里。

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
<?php
for ($i = 0; $i < 36; $i++) {
if ($i < 10) {
$a[$i] = chr($i + 48);
}
if ($i >= 10) {
$a[$i] = chr($i + 55);
}
}
$link = null;
$host = '127.0.0.1';
$dbusername = '不告诉你';
$dbpassword = '不告诉你';
$database = '不告诉你';
$link = mysqli_connect($host, $dbusername, $dbpassword, $database);
$sql_select = "SELECT * FROM Student where sid = '$id'";
$sql_insert = "INSERT INTO Student VALUES ('$id', '$sname')";
$sql = "select * from Student";
function getID()
{
global $a;
$id = "";
for ($i = 0; $i < 10; $i++) {
$x = mt_rand(0, 35);
$id = $id . $a[$x];
}
return($id);
}
function MakeName(){
global $a;
$sname = "";
for ($i = 0; $i < 10; $i++) {
$x = mt_rand(10, 35);
$sname = $sname . $a[$x];
}
return($sname);
}
do {
$id = getID();
$result = mysqli_query($link,"$sql_select");
$row = mysqli_fetch_row($result);
var_dump($row);
}while($row);
print_r($id);
$sname = MakeName();
var_dump($sname);
var_dump(mysqli_query($link,"INSERT INTO Student VALUES ('$id', '$sname')"));