PHP中二维数组的排序方法

 更新时间:2016年11月25日 15:16  点击:1306

<?php
/**
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}

// Get args number.
$ArgCount = func_num_args();

// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I )
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}

// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}

// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}

十天学会php之第一天

  以 Apache web server 和 MY SQL 作为WEB服务器和数据库在php-4.3.3下的环境做程序简单的构建和访问查看数据库用 PHPMYADMIN。

  PHP的语法:

  1、嵌入方法:

  PHP可以是以<?php或者是<?为开始符号,结束符号是?>,当然也可以自己指定。

  2、引用文件:

  引用文件的方法有两种:require 及 include。

  require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

  include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

  3、注释方法:

<?php
echo "这是第一种例子。n" ; // 本例是 C 语法的注释
/* 本例采用多行的
注释方式 */
echo "这是第二种例子。n" ;
echo "这是第三种例子。n" ; # 本例使用 UNIX Shell 语法注释
?>

  4、变量类型:

$mystring = "我是字符串" ;
$NewLine = "换行了n" ;
$int1 = 38 ;
$float1 = 1.732 ;
$float2 = 1.4E 2 ;
$MyArray1 = array( "子" , "丑" , "寅" , "卯" );

这里引出两个问题:第一PHP变量以"$"开头,第二PHP语句以";"结尾。这两个遗漏也是程序上大多错误所在。

  5、运算符号:

数学运算:

符号 意义
加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余数
累加
-- 递减

  字符串运算:

  运算符号只有一个,就是英文的句号"."。它可以将字符串连接起来,变成合并的新字符串。

<?
$a = "PHP 4" ;
$b = "功能强大" ;
echo $a.$b;
?>

  这里也引出两个问题,首先PHP中输出语句是echo,第二类似ASP中的<%=变量%>,PHP中也可以<?=变量?>。

逻辑运算:
符号 意义
< 小于
> 大于
<= 小于或等于
>= 大于或等于
== 等于
!= 不等于

全球超过300万个互联网网站的治理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。

假如你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的熟悉,使你把握一些常见的和高级的PHP功能。

  一、把PHP安装为Apache的DSO

PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:静态模式、动态模式(DSO)、CGI二进制模式。

  由于易于维护和升级,我强烈建议以DSO方式安装PHP。例如,初次安装时假如安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行 “make clean”,添加新的配置选项,然后再运行“make”和“make install”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。

下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP:

1、从Apache软件基金会得到最新版本的Apache源代码;

2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、运行下面的命令,把文件安装到apache_[version]目录中:

tar -xvf apache_[version].tar

5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);

6、键入下面的命令为编译Apache作预备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在已经设置了mod_so的新值,它将答应Apache使用DSO模块;

7、回到提示符状态后键入make,并等待再次回到提示符状态;

8、执行“make install”命令。

至此,Apache已经安装完毕,系统将重回到提示符状态。接下来我们开始安装PHP:

1、在PHP主页的下载区中找到最新版本的链接;

2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、执行下面的命令把文件安装在php-[version]目录中:

tar -xvf php-[version]

5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;

至此,已经作好了以DSO方式安装PHP的预备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。为了得到较高的性能,我没有安装对MySQL的支持模块。

./configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs]

6、回到提示符状态后执行make命令,等待重新返回到提示符状态;

7、执行make install命令。

至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。

1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:

ServerAdmin you@yourdomain.com

2、找到以ServerName开头的行,把它改为真正的值,例如:

ServerName localhost

3、找到内容如下所示的小节:

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容

本款计数器用文本计数,没有用到数据库,可以实现如下功能:

  利用一个文本文件实现多个页的计数减少服务器的I/O占用率在需要纪录的文件里,只需加入很少的几行代码

  基本思路如下:

  服务器程序从文本文件中读取该页被浏览的次数,(因为所有文件向服务器提出请求时,他们的环境变量REQUEST_URI都代表他来自于何处... ...,所以,以请求文件的环境变量REQUEST_URI来辨别到底是那一页正被浏览。),将这个次数加一储存,并在调用这页的用户的计算机上显示出来。
请先看我的数据文本中纪录的数据样本,(红色为浏览次数,其前面为相应的被浏览的文件)

counter.php

<html>
<head>
<title>计数器</title>
<head>
<body>
<?php
/* 定义储存数据的文本文件 */
$counterFile="counter.dat";
/* 定义一个标记,用来辨别现在需纪录的数据是否已经文本数据中 */
$sign=False;
/* 将数据以数组的方式读入变量 $sounterData 备用, */
$counterData=file($counterFile);
/* 用count()函数计算共有多少个纪录 */
/* 用explode()函数把$counterData[$i]按符号"|"分开,并以数组的方式送回到变量$varArray里 */
/* 函数implode()与explode()刚刚相反,把数组$varArray以符号"|"连接起来送回到$counterData */
/* 还利用了环境变量$PATH_INFO
for($i=0;$i<=count($counterData)-1;$i )
 {
  $varArray=explode("|",$counterData[$i]);
  if ($varArray[0]==$GLOBALS["REQUEST_URI"])
   {
    $varArray[1] ;
    print($varArray[1]);
    $counterData[$i]=implode("|", $varArray);
    $sign=True;
    /* 找到本纪录所在的位置后, 用break 退出循环 */ 
    break;
   }
 }
/* 在这里,利用implode()这个函数的功能,将数据整理好了,一起写入文本文件中 */
/* 这样,对服务器的I/O占用就降到了最低点
$data=implode("",$counterData);
/* 打开文本文件,将数据写入 */
$fp=fopen($counterFile,"w");
fputs($fp,$data);
/* 假如需要纪录的数据不在文本里,标志$sign= Flase, 那么就往文本里添加数据 */
if (!$sign) {fputs($fp," ".$GLOBALS["REQUEST_URI"]."|"."1"."|");
print("1");
/* 关闭数据文件 */
fclose($fp);
?>
</body>
</html>

我们已经看到了这段程序的工作过程,也都知道了思路,但假如,每个文件里都这样写,岂不是太麻烦.
别慌! 我们还有PHP提供的强大的require()功能呢! 我们把counter.php写成函数,使用就方便许多了。那还等什么,下面就是你所要的函数:

counter.inc

<?php
class Spider {

var $mysql_host;
var $mysql_name;
var $mysql_pwd;
var $mysql_db;

var $parentUrl; //开始搜索的url
var $searchNum; //搜索的层数
var $url;
var $db;

//数据库连接函数
function connect_to_db($mysql_host,$mysql_name,$mysql_pwd){
$db=mysql_connect($mysql_host,$mysql_name,$mysql_pwd);
return $db;
}


//处理url,以符合标准
function dealUrl($url){
if(strstr($url,"http://")){

}else{
$url="http://".$url;
}
if(strrpos($url,'/')==strlen($url)-1){
$url = substr($url,0,-1);
}
return $url;
}

//取一个链接下的所有链接
function getUrl($url){
$fcontents = file($url);
$nextUrl = "succeed";
while(list(,$line)=each($fcontents)){

//while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-] "?)(.*)',$line,$regs)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-] [^([:space:]|>|")]*)(.*)',$line,$regs)){
$regs[1] =
eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-] )("?)',"2",$regs[1]);

if(strstr($regs[1],"http://")){
}else{
$regs[1]=$url."/".$regs[1];
}

//echo "&nbsp;&nbsp;&nbsp;&nbsp;$regs[1]<br>";
$line = $regs[2];
if(strstr($nextUrl,$regs[1])){

}else{
if(strstr($regs[1],".php")||strstr($regs[1],".asp")||strstr($regs[1],".jsp")||strstr($regs[1],".htm")||strstr($regs[1],".com")||strstr($regs[1],".cn")||strstr($regs[1],".net")||strstr($regs[1],".org")){
if(strstr($regs[1],"_bak")){

}else{
$nextUrl=$nextUrl.",".$regs[1];
}

}
}
}

}
return $nextUrl;
}


//查询该URL是否需要重新搜索
function queryUrl($url,$contentDesc,$db){
mysql_select_db("SearchEngine");
$sql="select * from visited where visitedUrl='".$url."' and contentDesc='".$contentDesc."'";
$rs=mysql_query($sql,$db);
if(mysql_fetch_row($rs)){
return false;
}else{
return true;

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25