在php教程中,获得二维或多维数组的第一维的长度,这是个常用的程序判断,比如你读取的数组是一个二维数组:
<?php
$arr=array(
0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),
1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')
);
?>
如果你想统计数组$arr的长度,也就是说该二维数组只有两条新闻,你想要的数字也是2,但是如果使用count($arr)不同版本的php,统计的结果是不一样的;
后来在php手册中发现,count函数还有第二个参数,解释如下:
count函数有两个参数:
0(或COUNT_NORMAL)为默认,不检测多维数组(数组中的数组);
1(或COUNT_RECURSIVE)为检测多维数组,
所以如果要判断读取的数组$arr是不是有新闻信息,就要这样写了:
<?php
if(is_array($arr) && count($arr,COUNT_NORMAL)>0 )
{
.....
} else {
.....
}
?>
你可以使用这样的代码来测试该函数:
<?php
$arr=array(
0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),
1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')
);
echo '不统计多维数组:'.count($arr,0);//count($arr,COUNT_NORMAL)
echo "<br/>";
echo '统计多维数组:'.count($arr,1);//count($arr,COUNT_RECURSIVE)
?>
编码范围1. GBK (GB2312/GB18030)
ps教程: 韩文是大于[u9fa5]的字符
正则例子:
preg_replace(”/([x80-xff])/”,”",$str);
preg_replace(”/([u4e00-u9fa5])/”,”",$str);
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文
x80-xff 中文
2. UTF-8 (Unicode)
u4e00-u9fa5 (中文)
x3130-x318F (韩文
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)
//判断内容里有没有中文-GBK (PHP)
function check_is_chinese($s){
return preg_match('/[x80-xff]./', $s);
}
获取字符长度,中文算一个字符
//获取字符串长度-GBK (PHP)
function gb_strlen($str){
$count = 0;
for($i=0; $i<strlen($str); $i++){
$s = substr($str, $i, 1);
if (preg_match("/[x80-xff]/", $s)) ++$i;
++$count;
}
return $count;
}
//统计字符串长度-UTF8 (PHP)
function utf8_strlen($str) {
$count = 0;
for($i = 0; $i < strlen($str); $i++){
$value = ord($str[$i]);
if($value > 127) {
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return $count;
}
//截取字符串字串-GBK (PHP)
function gb_substr($str, $len){
$count = 0;
for($i=0; $i<strlen($str); $i++){
if($count == $len) break;
if(preg_match("/[x80-xff]/", substr($str, $i, 1))) ++$i;
++$count;
}
return substr($str, 0, $i);
}
//截取字符串-UTF8(PHP)
function utf8_substr($str,$position,$length){
$start_position = strlen($str);
$start_byte = 0;
$end_position = strlen($str);
$count = 0;
for($i = 0; $i < strlen($str); $i++){
if($count >= $position && $start_position > $i){
$start_position = $i;
$start_byte = $count;
}
if(($count-$start_byte)>=$length) {
$end_position = $i;
break;
}
$value = ord($str[$i]);
if($value > 127){
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}
//判断是否有中文字符-GBK (JavaScript)
function check_chinese_char(s){
return (s.length != s.replace(/[^x00-xff]/g,"**").length);
}
//判断是否是有韩文-UTF-8 (JavaScript)
function checkKoreaChar(str) {file_get_contents只读取网页的部分内容,其实这就是采集文章最简单最原始的做法了。
for(i=0; i<str.length; i++) {
if(((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))) {
return true;
}
}
return false;
}
在php教程中
file_get_contents函数可以打开本地文件,也可能读取远程文件
用法
file_get_contents( $url);
下面我们来看一下file_get_contents采集远程网站的内容的实例
代码如下 | 复制代码 |
$url = http://www.111cn.net $content = file_get_contents( $url); if( $content ) { $array = explode('<title>', $content);print_r($array); } else { echo '未采集成功'; } //如果成功输出为 array( 0=>网页制作教程教程--网页设计教程网-提供专业网页设计与网页制作教程 ) |
好了就做完了。
看看读取远程服务器内容的方法,可以和用fsockopen,fopen(需要设置allow_url_open)等函数来实现
我们这里总结了php 全面获取url地址栏参数多种方法哦,全部都用到了php自带的函数server代码如下 | 复制代码 |
<?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br>"; //获取网页地址 echo $_SERVER['PHP_SELF']."<br>"; //获取网址参数 echo $_SERVER["QUERY_STRING"]."<br>"; //来源网页的详细地址 echo $_SERVER['HTTP_REFERER']."<br>"; ?> |
方法二用?号表达式,
代码如下 | 复制代码 |
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; |
方法三也是一样
代码如下 | 复制代码 |
function getServerName() { $ServerName = strtolower($_SERVER['SERVER_NAME']?$_SERVER['SERVER_NAME']:$_SERVER['HTTP_HOST']); if( strpos($ServerName,'http://') ) { return str_replace('http://','',$ServerName); } return $ServerName; } //实例调用方法 echo getServerName(); |
方法四,这个比较全面的获取url参数了,首先用REQUEST_URI如果服务器不支持就用PHP_SELF再不支持
代码如下 | 复制代码 |
QUERY_STRING function GetCurUrl() { if(!empty($_SERVER["REQUEST_URI"])) { $scrtName = $_SERVER["REQUEST_URI"]; $nowurl = $scrtName; } else { $scrtName = $_SERVER["PHP_SELF"]; if(empty($_SERVER["QUERY_STRING"])) { $nowurl = $scrtName; } else { $nowurl = $scrtName."?".$_SERVER["QUERY_STRING"]; } } return $nowurl; } |
上面这些实例,其实都用到了php $_SEVER全局变量来实现了。
通过侦测脚本的内存使用情况,有利于代码的优化。PHP 提供了一个垃圾收集器和一个非常复杂的内存管理器。脚本执行时所使用的内存量,有升有跌。为了得到当前的内存使用情况,我们可以使用 memory_get_usage() 函数。如果需要获得任意时间点的最高内存使用量,则可以使用 memory_limit() 函数。view sourceprint?01 echo "Initial:
代码如下 | 复制代码 |
".memory_get_usage()." bytes "; 02 /* prints 03 Initial: 361400 bytes 04 */ 05 06 // let's use up some memory 07 for ($i = 0; $i < 100000; $i++) { 08 $array []= md5($i); 09 } 10 11 // let's remove half of the array 12 for ($i = 0; $i < 100000; $i++) { 13 unset($array[$i]); 14 } 15 16 echo "Final: ".memory_get_usage()." bytes "; 17 /* prints 18 Final: 885912 bytes 19 */ 20 21 echo "Peak: ".memory_get_peak_usage()." bytes "; 22 /* prints 23 Peak: 13687072 bytes |