由 老黎 发表于 2011-01-08 10:59:41
简单的一个php数组函数,之前没这个需要一直都不知道有这么一个函数,擦汗...
(PHP 4, PHP 5)
array_reverse — 返回一个单元顺序相反的数组
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留原来的键名。
Example #1 array_reverse() 例子
<?php
$input = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, TRUE);
?> 这将使 $result 和 $result_keyed 具有相同的单元,但是注意键名的区别。$result 和 $result_keyed 的打印输出显示分别为:
Array
(
[0] => Array
(
[0] => green
[1] => red
)
[1] => 4
[2] => php
)
Array
(
[2] => Array
(
[0] => green
[1] => red
)
[1] => 4
[0] => php
)
Note: 第二个参数是 PHP 4.0.3 中新加的。
由 老黎 发表于 2010-06-11 04:48:27
取使用date取服务器日期
echo date("Y-m-d");
发现和实际日期相差一天,解法方法如下:
1.修改php.ini文件
date.timezone=PRC
//PRC是中华人民共和国意思
修改好后,重启一下apache就可以了
2.在php文件头加一行来定义时区
date_default_timezone_set("Asia/Chongqing");
Tags: php
由 老黎 发表于 2009-06-25 22:33:00
OOP(Object-Oriented Programming,面向对象编程)技术为编程人员敞开了一扇大门,使其编写的代码更简洁、更易于维护、并具有更强的可重用性。正因为OOP具有以上多种已被证实的功能,使得当今人们介绍的新语言大多都是面向对象的。PHP支持OOP的很多实用功能。
数据与工作在其上的代码在OOP中存在着基本的联系,OOP允许你围绕这种联系设计和实现程序。
类是用来建立对象的模板。
对象是类的实例。
对象和类的关系有些类似于值和数据类型的关系。
只有一种整数类型,但会有很多整数;程序只定义了一个类,但是可以通过这个类来创建很多不同的(或相同的)对象。
属性(property):与对象相关联的数据。
方法(method):与对象相关的函数。
在定义一个类时,可以给属性命名,并对其方法编写代码。
封装(encapsulation):类向实用对象的代码提供一些方法(接口,interface),使得外部不能直接访问对象的数据结构。
只有类中的代码才能够改变对象的数据结构,可以易于找出bug;也易于维护,可以改变类接口的内部实现,而不用改变使用类的代码(假如接口不变的话)。
继承(inheritance):基于已存在的类定义新的类,在新类中,可以新增或改变一些属性和方法。
被继承的类(基础类)称为超类(superclass)或基类(base class),新类则称为子类(subclass)或派生类(derived class)。
继承是代码重用的一种形式。
由 老黎 发表于 2008-10-10 23:34:00
快速浏览之中看到一篇感兴趣的
从此贴中引发出来的一些讨论很值得去看看
有兴趣的 绝不能错过
原文地址:http://bbs.phpchina.com/viewthread.php?tid=63549&extra=&page=1
出自 PHP China
作者:白菜
Database.core.php 数据库操类分析
在项目架构的设计上,Shopnc对数据库操作类进行了进一步的分离,增加了一个中间层,可以方便的切换 adodb,mysql,pdo等操作方式,像方法中的GetRow等都是调用的底层类中的方法,这些方法就是对 增、删、改、查、联表 等操作都进行了再次封装
代码分析:
/////////////////////////////////////////////////////////////////////////////
// 这个文件是 网城创想多用户商城 项目的一部分
//
// Copyright (c) 2007 - 2008 www.shopnc.net
//
// 要查看完整的版权信息和许可信息,请查看源代码中附带的 COPYRIGHT 文件,
// 或者访问 http://www.shopnc.net/ 获得详细信息。
/////////////////////////////////////////////////////////////////////////////
/**
* FILE_NAME : database.core.php FILE_PATH : multishopclassescoredatabase.core.php
* ....数据库操作类
*
* @copyright Copyright (c) 2007 - 2008 www.shopnc.net
* @author ShopNC Develop Team
* @version Thu Nov 08 13:36:35 CST 2007
*/
abstract class DataBase extends DBEngine{
/**
* 获得一条记录
*
* @param int $id 记录ID
* @param string $table_name 查询的表名
* @param string $field 记录ID字段名
* @param string $fields 查询的字段
* @return array $rs_row 返回数组形式的查询结果
*/
public function GetOneRow($id,$table_name,$field,$fields="*"){
$rs_sql = "select {$fields} from `{$table_name}` as {$table_name} where {$field}='" . $id . "'";
$rs_row = $this->GetRow($rs_sql);
return $rs_row;
}
/**
* 得到某条特定记录
*
* @param var $condition 可以是条件语句,也可以是数组,如果是数组,则统一为相等计算,并且为and关系
* @param string $table_name 不带前缀的表的名称
* @param string $fields 所需要得到的列
* @param string $order 排序信息
* @param string $group 分组信息
* @return var[] 一维数组,形式如$arr[列名]
*/
public function GetTheRow($condition,$table_name,$fields="*",$order = "",$group = ""){
$condition_str = "";
if (is_array($condition) == true){
//如果是数组,那么数组的键为字段名称,组合成为查询条件
foreach($condition as $k=>$v){
$condition_str .= " and {$k} = {$v}";
}
}else{
$condition_str = $condition;
}
//得到完整的SQL语句
$rs_sql = $this->GetSql($table_name,$condition_str,$fields,$order,$group);
$rs_row = $this->GetRow($rs_sql);
return $rs_row;
}
/**
* 组合多个表联结SQL语句
*
* @param string[] $table_array 放置表的数组
* @param string[] $join_str 放置表间连接类型,一般有inner join/left join
* @param string[] $on_array 放置联接条件的数组,其数组数量与联接类型数量一致
* @param string[] $fields_array 放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
* @param string $where_str 条件语句,形式如, and 表名.字段 = 值
* @param string[] $order_array 其用法与$fields_array类似
* @param string[] $group_array 其用法与$fields_array类似
* @return string
*/
public function GetJoinTableSql($table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$order_array = array(),$group_array = array()){
$from_str = "";
$select_str = "";
$order_str = "";
$group_str = "";
if(is_array($table_array) && is_array($on_array) && is_array($fields_array)){
//必须是2个或以上的表进行关联
if(count($table_array) <= 1){
return "";
}
//表的数量比联接类型大1
if(count($table_array) != count($on_array) + 1){
return "";
}
if(count($table_array) < count($fields_array)){
return "";
}
//组合from部分SQL语句
foreach($table_array as $k=>$v){
if (!strstr($v," as ")){
$rename = " as " . $v;
}else{
$allname = $v;
$v = trim(substr($v,0,strpos($v,"as")));
$rename = strstr($allname," as ");
$table_array[$k] = str_replace(" as ","",$rename);
}
if($k == 0){
$from_str .= "`" . $v . "` " . $rename;
}else{
$from_str = $from_str . " " . $join_str . " `" . $v ."` " . $rename . " on " . $on_array[$k - 1] . " ";
}
}
//组合SELECT部分的SQL语句
foreach($fields_array as $k=>$v){
if (trim($v) != ""){
$f_arr = explode(",",$v);
foreach ($f_arr as $f_k=>$f_v){
if (strpos("(",$f_v) > 0 && strpos("*",$f_v) < 0){
$f_arr[$f_k] = str_replace("(","(" . $table_array[$k] . "." ,$f_v);
}else if(strpos("(",$f_v) > 0 && strpos("*",$f_v) > 0){
$f_arr[$f_k] = $f_v;
}else{
$f_arr[$f_k] = $table_array[$k] . "." . $f_v;
}
}
$fields_array[$k] = implode(",",$f_arr);
$select_str .= $fields_array[$k] . ",";
}
}
$select_str = trim($select_str);
if (substr($select_str,strlen($select_str)-1,1) == ","){
$select_str = substr($select_str,0,strlen($select_str)-1);
}
//WHERE部分SQL语句
$where_str = $this->_conditionWhere($where_str);
//组合Order部分的SQL语句
foreach($order_array as $k=>$v){
if (trim($v) != ""){
$f_arr = explode(",",$v);
foreach ($f_arr as $f_k=>$f_v){
$f_arr[$f_k] = $table_array[$k] . "." . trim($f_v);
}
$order_array[$k] = implode(",",$f_arr);
$order_str .= $order_array[$k] . ",";
}
}
$order_str = trim($order_str);
if (trim($order_str) != ""){
if (substr($order_str,strlen($order_str)-1,1) == ","){
$order_str = substr($order_str,0,strlen($order_str)-1);
}
$order_str = " order by " . $order_str;
}
//组合Group部分的SQL语句
foreach($group_array as $k=>$v){
if (trim($v) != ""){
$f_arr = explode(",",$v);
foreach ($f_arr as $f_k=>$f_v){
$f_arr[$f_k] = $table_array[$k] . "." . trim($f_v);
}
$group_array[$k] = implode(",",$f_arr);
$group_str .= $group_array[$k] . ",";
}
}
$group_str = trim($group_str);
if (trim($group_str) != ""){
if (substr($group_str,strlen($group_str)-1,1) == ","){
$group_str = substr($group_str,0,strlen($group_str)-1);
}
$group_str = " group by " . $group_str;
}
return "select " . $select_str . " from " . $from_str . " " . $where_str . " " . $order_str . " " . $group_str;
}else{
return false;
}
}
/**
* 构造最终应用于SQL查询的where检索语句
*
* @param string $condition_str 构造后的SQL检索语句字符串
* @return string $condition_str 返回完整的where检索语句字符串
*/
public function _conditionWhere($condition_str){
if(substr(trim($condition_str),0,3)=="and"){
$condition_str = " where " . substr(trim($condition_str),3);
}
return $condition_str;
}
/**
* 返回符合条件的记录总数
*
* @param string $table_name 表名
* @param string $condition 条件
* @return int
*/
public function CountRows($table_name, $condition){
$row_sql = "SELECT count(*) as count FROM `{$table_name}` as {$table_name} ";
if("" != $condition){
$row_sql .= " where " . $condition;
}
$count = $this->GetOne($row_sql);
return $count;
}
/**
* 根据条件更新多条记录
*
* @param array $update_array 更新的字段及值,一维数组
* @param string $table_name 要更新的表的名称
* @param string $condition 更新条件
* @param string $genre 更新的类型,common普通直接付值,formula函数或运算形式的付值
* @return boolen
*/
public function UpdateRows($table_name, $update_array, $condition = "",$genre = "common"){
$row_sql = "UPDATE `{$table_name}` SET";
if(is_array($update_array)){
foreach ($update_array as $key => $value){
if ($value == "null" || $genre == "formula"){
$set_string .= ", {$key} = " . $value;
}else if($genre == "common"){
$set_string .= ", {$key} = '" . $value . "'";
}
}
$row_sql .= substr($set_string, 1);
}else{
return false;
}
if("" != $condition){
$row_sql .= " where " . $this->_DropName($condition,$table_name);
}
return $update_rs = $this->Execute($row_sql);
}
/**
* 更新一条记录
*
* @param int $id 更新记录的ID值
* @param array $update_array 更新字段数组
* @param string $table_name 数据表名
* @param string $field 更新记录ID的字段名
* @return boolean
*/
public function UpdateRow($id, $update_array, $table_name, $field){
if($this->_dbconfig['engine_type'] == "adodb"){
$row_sql = "select * from `{$table_name}` as {$table_name} where {$field} = '" . $id ."'";
$update_rs = $this->Execute($row_sql);
$update_sql = $this->GetUpdateSQL($update_rs, $update_array);
}else{
$update_sql = $this->GetUpdateSQL($table_name, $update_array , "where {$field} = '" . $id ."'");
}
if(!empty($update_sql)){
return $this->Execute($update_sql);
}else{
return false;
}
}
/**
* 插入一条记录
*
* @param array $insert_array 插入字段数组
* @param string $table_name 插入数据表名
* @param string $field 表ID字段
* @return boolean
*/
public function InsertRow($insert_array, $table_name, $field){
if($this->_dbconfig['engine_type'] == "adodb"){
$insert_sql = "select * from `{$table_name}` where {$field}='-1'";
$insert_rs = $this->Execute($insert_sql);
$insertSql = $this->GetInsertSQL($insert_rs, $insert_array);
}else{
$insertSql = $this->GetInsertSQL($table_name, $insert_array);
}
return $this->Execute($insertSql);
}
/**
* 删除一条或多条记录
*
* @param array or int $del_array 删除记录ID或ID数组
* @param string $table_name 删除记录所在表名
* @param string $field 删除记录匹配字段
* @param string $conditon 删除条件
* @return bool
*/
public function DelRow($del_array,$table_name,$field,$conditon = ""){
if(is_array($del_array)){
foreach ($del_array as $value){
$this->DeleOneRow($value,$table_name,$field,$conditon);
}
return true;
}else{
return $this->DeleOneRow($del_array,$table_name,$field,$conditon);
}
}
/**
* 删除某一条记录
*
* @param string $del_value 要删除的字段值
* @param string $table_name 删除记录所在表名
* @param string $field 删除记录匹配字段
* @param string $conditon 删除条件
* @return boolen
*/
public function DeleOneRow($del_value = "",$table_name,$field = "",$conditon = ""){
if ($del_value != "" && $field != ""){
$conditon_str = " and {$field} = '" . $del_value . "'";
}
$conditon_str .= " " . $conditon;
$del_sql = "delete from `{$table_name}` " . $this->_DropName($this->_conditionWhere($conditon_str),$table_name);
return $del_rs = $this->Execute($del_sql);
}
/**
* 获得最后一条记录
*
* @param string $table_name
* @param string $field
* @param string $conditionstr
* @param string $order 排序语句
* @param string $group 分组语句
* @return array $rs_row
*/
public function GetLastRow($table_name, $field, $conditionstr="",$order="",$group=""){
//得到完整的SQL语句
$rs_sql = $this->GetSql($table_name,$conditionstr,"Max({$field}) as {$field}",$order,$group);
$rs_row = $this->GetRow($rs_sql);
return $rs_row;
}
/**
* 获得列表的操作
*
* @param string $obj_condition
* @param object $obj_page
* @param string $tablename
* @param string $fields 取得特定字段,默认为*
* @param string $order 排序语句,如member_id desc
* @param string $group 分组语句
* @param int $count 需要的记录数量
* @return array
*/
public function GetList($conditionstr = "",&$obj_page,$table_name,$fields="*",$count = 0,$order = "",$group = ""){
//得到完整的SQL语句
$rs_sql = $this->GetSql($table_name,$conditionstr,$fields,$order,$group);
return $this->GetResultArray($rs_sql,&$obj_page,$count);
}
/**
* 根据分页对象的设置,获取当前页面的数据列表
*
* @param object $obj_page 分页对象
* @param string[] $table_array 放置表的数组
* @param string[] $join_str 放置表间连接类型,一般有inner join/left join
* @param string[] $on_array 放置联接条件的数组,其数组数量与联接类型数量一致
* @param string[] $fields_array 放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
* @param string $where_str 条件语句,形式如, and 表名.字段 = 值
* @param string[] $order_array 其用法与$fields_array类似
* @param string[] $group_array 其用法与$fields_array类似
* @param int $count 需要的记录数量
* @return var[]
*/
public function GetJoinList(&$obj_page,$table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$count=0,$order_array = array(),$group_array = array()){
//得到一个完整的SQL语句
$list_sql = $this->GetJoinTableSql($table_array,$join_str,$on_array,$fields_array,$where_str,$order_array,$group_array);
return $this->GetResultArray($list_sql,$obj_page,$count);
}
/**
* 得到某一条记录
*
* @param string[] $table_array 放置表的数组
* @param string[] $join_str 放置表间连接类型,一般有inner join/left join
* @param string[] $on_array 放置联接条件的数组,其数组数量与联接类型数量一致
* @param string[] $fields_array 放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
* @param string $where_str 条件语句,形式如, and 表名.字段 = 值
* @param string[] $order_array 其用法与$fields_array类似
* @param string[] $group_array 其用法与$fields_array类似
* @return string
*/
public function GetOneJoinArray($table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$order_array = array(),$group_array = array()){
//得到一个完整的SQL语句
$list_sql = $this->GetJoinTableSql($table_array,$join_str,$on_array,$fields_array,$where_str,$order_array,$group_array);
return $this->GetRow($list_sql);
}
/**
* 根据分页对象的设置,获取当前页面的数据列表
*
* @param string $sql_str 完整的SQL查询语句
&nbs ...
Tags: php
Based on ThinkPHP
粤ICP备09139230号