php中检查多维数组是否存在某个值

$arr = array(
   array('a', 'b'),
   array('c', 'd')
);
 
in_array('a', $arr); // 此时返回的永远都是 false
deep_in_array('a', $arr); // 此时返回 true 值
 

function deep_in_array($value, $array, $case_insensitive = false){
foreach($array as $item){
if(is_array($item)) $ret = deep_in_array($value, $item, $case_insensitive);
else $ret = ($case_insensitive) ? strtolower($item)==$value : $item==$value;
if($ret)return $ret;
}
return false;
}

来自in_array的评论:http://www.php.net/manual/zh/function.in-array.php#64161

php使用memcache例子

<?php
$db_host = "localhost";
$db_name = 'news';
$db_user = "comet";
$db_password = "12345678";

// set pdo name
$dsn = "mysql:host=$db_host;dbname=$db_name";
//连接
$mem = new Memcache();
$mem->connect('127.0.0.1', 11211);

$sql = "SELECT newsID,newssn,newsinfo FROM news";
$key=md5($sql);

if(!$mem->get($key))
{
$db = new PDO($dsn, $db_user ,$db_password);
$db->query("set character set 'utf8'");
$sth = $db->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();
$f = 'mysql';
$mem->add($key,serialize($result),0,0); //mysql 查询后,插入 memcache
$data = $result;
}
else{
$f = 'memcache';
$data_mem=$mem->get($key);
$data = unserialize($data_mem);
}

echo $f;
echo "<br>";
print_r($data);

 

// //保存数据
// $mem->set('key1', 'This is a value', 0, 60);
// $val .= $mem->get('key1');
// echo "Get key1 value: " . $val ."<br />";

// //替换数据
// $mem->replace('key1', 'This is replace value', 0, 60);
// $val = $mem->get('key1');
// echo "Get key1 value: " . $val . "<br />";

// //保存数组
// $arr = array('aaa', 'bbb', 'ccc', 'ddd');
// $mem->set('key2', $arr, 0, 60);
// $val2 = $mem->get('key2');
// echo "Get key2 value: ";
// print_r($val2);
// echo "<br />";

// //删除数据
// $mem->delete('key1');
// $val = $mem->get('key1');
// echo "Get key1 value: " . $val . "<br />";

// //清除所有数据
// $mem->flush();
// $val2 = $mem->get('key2');
// echo "Get key2 value: ";
// print_r($val2);
// echo "<br />";

//关闭连接
$mem->close();

ascii码值对应列表

chr(0) 为0的字符
chr(1)
chr(2)
chr(3)
chr(4)
chr(5)
chr(6)
chr(7) 响铃
chr(8) 回格
chr(9) tab(水平制表符)
chr(10) 换行
chr(11) tab(垂直制表符)
chr(12) 换页
chr(13) 回车 chr(13)&chr(10) 回车和换行的组合
chr(14)
chr(15)
chr(16)
chr(17)
chr(18)
chr(19)
chr(20)
chr(21)
chr(22)
chr(23)
chr(24)
chr(25)
chr(26) 结束 End
chr(27) 脱离 Pause break
chr(28)
chr(29)
chr(30)
chr(31)
chr(32) 空格 SPACE
chr(33) !
chr(34)
chr(35) #
chr(36) $
chr(37) %
chr(38) &
chr(39) ’
chr(40) (
chr(41) )
chr(42) *
chr(43) +
chr(44) ,
chr(45) -
chr(46) .
chr(47) /
chr(48) 0
chr(49) 1
chr(50) 2
chr(51) 3
chr(52) 4
chr(53) 5
chr(54) 6
chr(55) 7
chr(56) 8
chr(57) 9
chr(58) :
chr(59) ;
chr(60) <
chr(61) =
chr(62) >
chr(63) ?
chr(64) @
chr(65) A
chr(66) B
chr(67) C
chr(68) D
chr(69) E
chr(70) F
chr(71) G
chr(72) H
chr(73) I
chr(74) J
chr(75) K
chr(76) L
chr(77) M
chr(78) N
chr(79) O
chr(80) P
chr(81) Q
chr(82) R
chr(83) S
chr(84) T
chr(85) U
chr(86) V
chr(87) W
chr(88) X
chr(89) Y
chr(90) Z
chr(91) [
chr(92) \
chr(92) \
chr(93) ]
chr(94) ^
chr(95) _
chr(96) `
chr(97) a
chr(98) b
chr(99) c
chr(100) d
chr(101) e
chr(102) f
chr(103) g
chr(104) h
chr(105) i
chr(106) j
chr(107) k
chr(108) l
chr(109) m
chr(110) n
chr(111) o
chr(112) p
chr(113) q
chr(114) r
chr(115) s
chr(116) t
chr(117) u
chr(118) v
chr(119) w
chr(120) x
chr(121) y
chr(122) z
chr(123) {
chr(124) |
chr(125) }
chr(126) ~
chr(127)
chr(128)
chr(129)
chr(130)
chr(131)
chr(132)

有个简单的查看方法,打开记事本,如要查看“chr(119) w”,可以按下Alt+119(先按住Alt不放,然后输入数字,输完后在放开)注意:数字一定要从旁边的数字键盘输入,否则无效.

中国天气网的城市代码

获取省级代码:
http://www.weather.com.cn/data/list3/city.xml

01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,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|台湾

获取城市代码(例如28|广东):
http://www.weather.com.cn/data/list3/city28.xml

2801|广州,2802|韶关,2803|惠州,2804|梅州,2805|汕头,2806|深圳,2807|珠海,2808|佛山,2809|肇庆,2810|湛江,2811|江门,2812|河源,2813|清远,2814|云浮,2815|潮州,2816|东莞,2817|中山,2818|阳江,2819|揭阳,2820|茂名,2821|汕尾,2822|东沙岛

获取区域代码(例如2801|广州):http://www.weather.com.cn/data/list3/city2801.xml

280101|广州,280102|番禺,280103|从化,280104|增城,280105|花都,280106|天河

例如花都:然后加上中国代码请求URL:http://m.weather.com.cn/data/101280105.html
留意有一些地方是有代号但是没有天气的,如这里的天河区。

php的utf-8字符串截取

/* utf-8字符串截取 */
function utf8_cutstr($string, $length) {
preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $string, $info);
for($i=0; $i<count($info[0]); $i++) {
$wordscut .= $info[0][$i];
$j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;
if ($j > $length - 3) {
return $wordscut." ...";
}
}
return join('', $info[0]);
}

php的mysql数据库对比代码

php的mysql数据库对比代码。来自:这里

<?php

$dbhost='127.0.0.1'; //服务器
$dbuser='root'; //用户名
$dbpw='comet'; //密码
$dbname='cacti'; //数据库名
$dbname1='cacti-nopia'; //数据库名

header("Content-type:text/html; char=gbk");
mysql_connect($dbhost,$dbuser,$dbpw) or die('数据库连接失败');
mysql_query("set names utf8");
mysql_select_db($dbname) or die('找不到数据库');
echo '<style>*{font-size:12px;}.fenlei{width:250px;float:left;display:inline;}.pic{height:60px;float:left;display:inline;}</style>';

$tb_names=mysql_list_tables($dbname);

$tables_one=array(); //表名数组

/* 数据库所有表 */
while($row=mysql_fetch_row($tb_names)){
$tables_one[]=$row[0];
}
echo '<font style="font-size:24px" color=red>'.$dbname.'</font>该数据库含有<font color=red>'.count($tables_one).'</font>个表,显示如下:<br>';
echo '<div class="fenlei"></div>';
foreach($tables_one as $v){
echo '<div class="fenlei">'.$v.'</div>';
}
echo '</table>';

/* 结构显示 */
$the_one = array();

for($i=0;$i<count($tables_one);$i++){
//获取表结构,此处可以改造成 show columns from 表名 的方式直接获取表结构。本文采用的是获取表头
$query=mysql_query("select * from `".$tables_one[$i]."` limit 1;");
while($row=mysql_fetch_field($query)){
$fd.=str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
$the_one[$tables_one[$i]][] = $row->name;
$the_one[$tables_one[$i].'_detail'][] = str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
}
$fd=substr($fd,0,-1)."\n";
$fd=str_replace(",",",\n",$fd);

unset($fd);
}

echo "\n<br><br><br><br>===============================分割线===================================<br><br><br><br>";

mysql_connect($dbhost,$dbuser,$dbpw) or die('数据库连接失败');
mysql_query("set names utf8");
mysql_select_db($dbname1) or die('找不到数据库');
echo '<style>*{font-size:12px;}.fenlei{width:250px;float:left;display:inline;}.pic{height:60px;float:left;display:inline;}</style>';

$tb_names=mysql_list_tables($dbname1);

$tables_two=array(); //表名数组

/* 数据库所有表 */
while($row=mysql_fetch_row($tb_names)){
$tables_two[]=$row[0];
}
echo '<font style="font-size:24px" color=red>'.$dbname1.'</font>该数据库含有<font color=red>'.count($tables_two).'</font>个表,显示如下:<br>';
echo '<div class="fenlei"></div>';
foreach($tables_two as $v){
echo '<div class="fenlei">'.$v.'</div>';
}
echo '</table>';

/* 结构显示 */
$the_two = array();

for($i=0;$i<count($tables_two);$i++){
$query=mysql_query("select * from `".$tables_two[$i]."` limit 1;");
while($row=mysql_fetch_field($query)){
$fd.=str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
$the_two[$tables_two[$i]][] = $row->name;
$the_two[$tables_two[$i].'_detail'][] = str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
}
$fd=substr($fd,0,-1)."\n";
$fd=str_replace(",",",\n",$fd);
unset($fd);
}

echo "\n<br><br><br><br>==============================表对比==================================<br><br><br><br>";

$diff_1 = array_diff($tables_one,$tables_two);
$diff_2 = array_diff($tables_two,$tables_one);
if(empty($diff_1) && empty($diff_2)){
echo "数据库表一样";
}
if($diff_1){
echo "{$dbname1}少{$dbname} <font style='font-size:24;color:red'>".count($diff_1)."</font> 张表。表名:".implode(",",$diff_1);
}
if($diff_2){
echo "{$dbname}少{$dbname1} <font style='font-size:24;color:red'>".count($diff_2)."</font> 张表。表名:".implode(",",$diff_2);
}
if($diff_1 || $diff_2 ){
echo "请先对照好数据库表再进行表结构对比";
exit();
}

echo "<br><br><br><br>=============================={$dbname}与{$dbname1}表结构对比(只显示{$dbname}表比{$dbname1}多的字段,不显示{$dbname1}比{$dbname}多的字段)==================================<br><br><br><br>";
$have = true;
for($i=0;$i<count($tables_one);$i++){
$diff_struct = array();
$diff_struct[$tables_one[$i]] = array_diff($the_one[$tables_one[$i]],$the_two[$tables_two[$i]]);
if($diff_struct[$tables_one[$i]]){
$have = FALSE;
echo $tables_one[$i]."中,多".implode(',',$diff_struct[$tables_one[$i]])."字段<br>";
}
}
$have = TRUE;
echo "<br><br><br><br>=============================={$dbname1}与{$dbname}表结构对比(只显示{$dbname1}表比{$dbname}多的字段,不显示{$dbname}比{$dbname1}多的字段)==================================<br><br><br><br>";
for($i=0;$i<count($tables_two);$i++){
$diff_struct = array();
$diff_struct[$tables_two[$i]] = array_diff($the_two[$tables_two[$i]],$the_one[$tables_one[$i]]);
if($diff_struct[$tables_two[$i]]){
$have = FALSE;
echo $tables_two[$i]."中,多".implode(',',$diff_struct[$tables_two[$i]])."字段<br>";
}
}

if($have){
echo "数据库表结构一样";
}
?>

sublime text常用开发插件

常用sublime text 2来写html,javascript,php,这里列出一些常用的插件。

先安装 package control 插件管理包:在st2中按ctrl+` 打开命令行,输入下面一行代码,然后重启 st2 后可以在 perferences 中看到有package control ,再按ctrl+shift+p打开,输入install后回车会上网获取插件包列表。

import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation') 

代码提示:
package control:插件包管理,先装它再装其他的。
jQuery:jquery提示,非常好用。
sublimeint:php函数提示。
DocBlockr:DocBlockr可以自动生成PHPDoc风格的注释。它支持的语言有Javascript, PHP, ActionScript, CoffeeScript, Java, Objective C, C, C++
InsertDate:插入日期。

代码格式化:
jsFormat

文件同步:
FTPSync:同步到ftp。
SFTP:利用SFTP同步到服务器上,没ftp的时候方便。

使用jQuery(document).ready()与window.onload的注意事项

基本上在 JavaScript 的 DOM 物件層級中,document 物件是隸屬於 windows 物件 ( document == window.document ),首先先介紹 jQuery(document).ready() 與 jQuery(window).load() 的差異,而這兩者的差別說明如下:

  • jQuery(document).ready(function() { … }) 《  或簡寫為 $(function() { … });  》
    • 當 document 物件下所有 DOM 物件都可以正確取得時,就會觸發 jQuery.ready() 註冊的 function,這時雖然後 <img src="…" /> 定義的圖片正在下載,但由於 <img> 這個 DOM 物件已經都 ready 了,所以 jQuery 並不會等圖片全部下載完畢才執行 ready 事件。
  • jQuery(window).load(function() { … })
    • 而使用 window 的 load 事件,卻是完全不同的行為,jQuery 裡的 window 的 load 事件與 JavaScript 裡的 window.onload 事件一模一樣,註冊在這裡面的事件都會等到整個視窗裡所有資源都已經全部下載後才會執行,例如該頁面有 100 張圖片就會等 100 圖片都下載完才會執行,其中也包括所有 iframe 子頁面的內容必須完整載入。

本文参考自:这里

JS里的{ }大括号和[ ]中括号的用法

谈谈JS里的{ }大括号和[ ]中括号的用法,理解后就可以看懂JSON结构了。

一、{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。

如:var LangShen = {"Name":"Langshen","AGE":"28"};

上面声明了一个名为“LangShen”的对象,多个属性或函数用,(逗号)隔开,因为是对象的属性,

所以访问时,应该用.(点)来层层访问:LangShen.Name、LangShen.AGE,当然我们也可以用数组的方式来访问,如:LangShen["Name"]、LangShen["AGE"],结果是一样的。

该写法,在JSON数据结构中经常用,除此之外,我们平时写函数组的时候,也经常用到,如:

var LangShen = {
Name = function(){
return "LangShen";
},

Age = function(){
return "28";
}

}

调用方式差不多,因为是函数组,所以要加上(),如:alert( LangShen.Name() );

二、[ ]中括号,表示一个数组,也可以理解为一个数组对象。

如:var LangShen = [ "Name","LangShen","AGE","28" ];

很明显,每个值或函数,都是独立的,多个值之间只用,(逗号)隔开,因为是数组对象,所以它等于:

var LangShen = Array( "Name","LangShen","AGE","28" );

访问时,也是和数组一样,alert( LangShen[0] );

三、{ } 和[ ] 一起使用,我们前面说到,{ } 是一个对象,[ ] 是一个数组,我们可以组成一个对象数组,如:

var LangShen = { "Name":"Langshen",
"MyWife":[ "LuLu","26" ],
"MySon":[{"Name":"Son1"},{"Name":"Son2"},{"Name":"Son3"}]
}

从上面的结构来看,是一个对象里面的第一项是个属性,第二项是一个数组,第三个是包含有多个对象的数组。调用起来,也是一层一层访问,对象的属性用.(点)叠加,数组用 [下标] 来访问。

如:alert( LangShen.MySon[1].Name ) ;

参考自:http://hi.baidu.com/langshen/item/a52c580ab16d2c31a2332ae2