小子的博客

宝剑锋从磨砺出,梅花香自苦寒来。

1
2
$arr1 = array(0=>"Horse",1=>"Dog");//非关联数组
$arr2 = array("an1"=>"Horse","an2"=>"Dog");//关联数组

先来说说网上的一段func:

1
2
3
function is_assoc($arr) {
return array_keys($arr) !== range(0, count($arr) - 1);
}

测试:
1
2
3
4
5
6
7
8
9
$arr = array(0=>"Horse",1=>"Dog");
var_dump(is_assoc($arr));//bool(false)
$arr = array(2=>"Horse",3=>"Dog");
var_dump(is_assoc($arr));//bool(true)
$arr = array("an1"=>"Horse","an2"=>"Dog");
var_dump(is_assoc($arr));//bool(true)
/**
* 上面前两个都是非关联数组,却是两种不同的结果,显然原作者没考虑到index不是 从0开始 或 连续 的情况
*/

修正:
(将数组的键值重新排列)

1
2
3
function is_assoc($arr) {
return array_keys(array_merge($arr)) !== range(0, count($arr) - 1);
}

再看看,是不是OK了!


看代码:(请使劲的往右拖动滚动条)

1
^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$

猜猜这个是匹配什么的正则?


首先我们反编译clipboard.swf得到如下代码:

1
2
3
4
5
6
// [Action in Frame 1],给flash传值
getURL(’javascript:getClipboardData()’);
//当鼠标在flash上按下的时候执行。。。
on (press) { System.setClipboard(str);//设置粘贴板的内容
getURL(’javascript:hideMenu(’fwin_dialog’, ’dialog’)’);//关闭discuzx的弹出菜单’
}

可见在flash中直接调用了两个javascript函数,这两个函数在common.js里面。
1
2
function getClipboardData() { window.document.clipboardswf.SetVariable(’str’, clipboardswfdata); }
//关于hideMenu函数就不作介绍,是隐藏discuzx的弹出菜单的。

附件有实例。。。clipboard.zip


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$data = array();//初始化变量
//从数据库取值,遍历
$query = DB::query("SELECT * FROM ".DB::table(’home_blog_category’)." ORDER BY displayorder");
while($value = DB::fetch($query)) {
$value[’catname’] = dhtmlspecialchars($value[’catname’]);
$data[$value[’catid’]] = $value;
}
foreach($data as $key => $value) {
$upid = $value[’upid’];
$data[$key][’level’] = 0;
if($upid && isset($data[$upid])) {
$data[$upid][’children’][] = $key;
while($upid && isset($data[$upid])) {
$data[$key][’level’] += 1;
$upid = $data[$upid][’upid’];
}
}
}
//最后得到要操作的数组

1
2
3
4
5
6
//显示一级分类
foreach ($category as $key=>$value) {
if($value[’level’] == 0) {
echo showcategoryrow($key, 0, ’’);//该函数在下面
}
}

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
function showcategoryrow($key, $level = 0, $last = ’’) {
//下面三句可以直接认为是上面刚才得到的$data数组
global $_G;
loadcache(’blogcategory’);
$value = $_G[’cache’][’blogcategory’][$key];
$return = ’’;
//下面两句可跳过
include_once libfile(’function/portalcp’);
$value[’num’] = category_get_num(’blog’, $key);
if($level == 2) {
$class = $last ? ’lastchildboard’ : ’childboard’;
$return = ’<tr class="hover"><td class="td25"><input type="text" class="txt" name="order[’.$value[’catid’].’]" value="’.$value[’displayorder’].’" /></td><td><div class="’.$class.’">’.
’<input type="text" name="name[’.$value[’catid’].’]" value="’.$value[’catname’].’" class="txt" />’.
’</div>’.
’</td><td>’.$value[num].’</td><td><a href="’.ADMINSCRIPT.’?action=blogcategory&operation=delete&catid=’.$value[’catid’].’">’.cplang(’delete’).’</a></td></tr>’;
} elseif($level == 1) {
$return = ’<tr class="hover"><td class="td25"><input type="text" class="txt" name="order[’.$value[’catid’].’]" value="’.$value[’displayorder’].’" /></td><td><div class="board">’.
’<input type="text" name="name[’.$value[’catid’].’]" value="’.$value[’catname’].’" class="txt" />’.
’<a class="addchildboard" onclick="addrowdirect = 1;addrow(this, 2, ’.$value[’catid’].’)" href="###">’.cplang(’blogcategory_addthirdcategory’).’</a></div>’.
’</td><td>’.$value[num].’</td><td><a href="’.ADMINSCRIPT.’?action=blogcategory&operation=delete&catid=’.$value[’catid’].’">’.cplang(’delete’).’</a></td></tr>’;
for($i=0,$L=count($value[’children’]); $i<$L; $i++) {
$return .= showcategoryrow($value[’children’][$i], 2, $i==$L-1);
}
} else {
$return = ’<tr class="hover"><td class="td25"><input type="text" class="txt" name="order[’.$value[’catid’].’]" value="’.$value[’displayorder’].’" /></td><td><div class="parentboard">’.
’<input type="text" name="name[’.$value[’catid’].’]" value="’.$value[’catname’].’" class="txt" />’.
’</div>’.
’</td><td>’.$value[num].’</td><td><a href="’.ADMINSCRIPT.’?action=blogcategory&operation=delete&catid=’.$value[’catid’].’">’.cplang(’delete’).’</a></td></tr>’;
for($i=0,$L=count($value[’children’]); $i<$L; $i++) {
$return .= showcategoryrow($value[’children’][$i], 1, ’’);
}
$return .= ’<tr><td class="td25"></td><td colspan="3"><div class="lastboard"><a class="addtr" onclick="addrow(this, 1, ’.$value[’catid’].’)" href="###">’.cplang(’blogcategory_addsubcategory’).’</a></div>’;
}
return $return;
}