关于php扩展编程如何返回数组的问题

 更新时间:2016年11月25日 16:15  点击:1323
  在zend.com找到了答案,提供了一组例子,这里下载:http://www.zend.com/apidoc/examples.tar.gz
  这样返回一个数组
PHP_FUNCTION(array_experiments)
{
zval *new_element;
MAKE_STD_ZVAL(new_element);
array_init(return_value);
ZVAL_LONG(new_element, 10);
zend_hash_index_update(HASH_OF(return_value), 3, (void *)&new_element, sizeof(zval *), NULL);
add_next_index_long(return_value, 20);
}
  具体函数参见php手册 zend api部分 不过这部分的内容一直都没有翻译成中文的...看得时候好吃力,用金山词霸也看不懂,英文太烂了,期待那天那个高人没事儿给翻译了...呵呵


  1. 当您在寻找关于某个具体的 PHP 函数的信息时,请转至 http://php.net/ 。例如:http://php.net/join。这将直接把您带到您地理位置附近的一台服务器上的联机手册中的正确位置上。
 
  2. 试试这个:pear install apc 。pear 命令是一个有用的安装程序,它甚至可以用来安装用 C 编写的 PHP 扩展。在这种情况下,它将安装 APC opcode 高速缓存扩展。
 
  3. 使用 opcode 高速缓存来提高性能。参见 #2。
 
  4. 在 PHP 中混合 OOP 和过程代码不存在任何错误。在对象有意义的时候使用对象,其余情况转用过程。
 
  5. 用您自己定制的 C 或 C 扩展来扩展 PHP 比您想象的要更容易。参见 PHP 源代码版本中的 README.EXT_SKEL。
 
  6. echo <<<EOB 语法对于用完整的 $variable 替换来输出文本块非常有用,并且无需避开任何东西。EOB;
  7. PATH_INFO 很棒!用它来清除难看的 URL。
 
  8. 使用一个记录程序,pear install apd。
 
  9. 数据库抽象大部分是虚构的故事。直接的数据库调用没什么错,它利用您选择的数据库必须提供的所有技巧和窍门,以从中获得尽可能高的性能。
 
  10. 保持使用您的基础技术,并构建简单的程序块。使用无线程的 Web 服务器,避免复杂的框架和抽象层,从而给您自己机会来跟踪和调试可能出现的任何问题。解决 Web 问题很简单;别试图使它变得困难。


  Netscape共同创办人Marc Andreessen在周三(10/19)举行的Zend/PHP会议上预言,简单的PHP描述性语言撰写工具,在Web-based应用程序的开发上,将会比Java更受欢迎。
 在升阳(Sun Microsystems)于1995年发表Java之后,由于Java的友善接口让工程师设计软件更为容易,受到工程师欢迎,但十年下来Java陆陆续续被加入了强大的功能,反而使它变得不容易操作。Marc Andreessen指出,现在的Java可能比C 更难学,在此同时,PHP传承了Java的简单精神,并创造一个比Java更容易使用的程序开发环境。
 
  PHP为一开放原始码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。
 
  Andreessen的看法可能很难博得Java拥护者的认同,因为现阶段全球仍有数百万专研Java的工程师,也有数百家公司参与Java Community Process(JCP),在JCP中共同主掌Java的命运。但是,就算是大力扶植Java、甚至以Java为WebSphere服务器软件核心的IBM,也认为PHP的前途会比Java来得好。
 
  IBM新网络科技事业处副总裁Rod Smith就说,「简单」是PHP最大的特色,而且它不会为了与其它语言竞争而加入新的语言功能,Java显然就不是这么做。
 
  而且,PHP的势力也不小,目前约有2200万的网站采用PHP,包括Yahoo!、Lufthansa等知名网站,数量并持续增加中,并有450个软件工程师有权去审核在PHP软件上的任何变动。
 
  与Java相较,PHP可用范畴限制较多,它仅能用在网络服务器上,不像Java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。
 
  Java和PHP除了在某些方面相互竞争之外,某个程度来看,也在彼此靠陇。甲骨文产品策略副总Ken Jacobs表示,即使甲骨文(Oracle)销售同时可执行Java及PHP的Java服务器与数据库软件,但正为Java加上一项额外的新功能,让这两个软件项目可以协同运作;更具体的说,Java规格需求223(JSR 223)将会「协助建构在Java社群与PHP社群之间的那座桥梁」。
 
  日前才发表可以分享照片等内容网站「Ning」的Marc Andreessen也说,现在Ning也同时执行Java与PHP,其中核心系统是由Java组成,比起该站所有可看见的应用程序都是由PHP写成,Java更像是操作系统层级。
 
  就像其它诸如Linux及Apache的开放原始码项目,PHP目前也受到计算机工业主要大厂的庇佑,像IBM跟Oracle都致力开发让PHP软件可以撷取旗下数据库的程序。事实上,IBM与Oracle的行为就像在为PHP背书,连这两大厂都支持PHP,证明PHP也许就是个好东西。


无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的一个树状显示函数,有什么不妥的地方希望大家能指出。
表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分类祖先的集合),isdir判断是否是目录(1为是,0为否)。
显示函数:
//$count为分类等级
sort_list($str,$fatherid,$count)
{
$rs = $this->sql->re_datas("select * from sort where father_id = fatherid");
$num = $this->sql->sql_numrows();
$i=0;
$n = 1;
while(isset($rs[$i]))
{
$name = "";
for($n = 1 ; $n < $count ; $n )
{
$name.="│ ";
}
if($i 1==$num)
{
$name.="└─".$rs[$i][name];
}
else
{
$name.="├─".$rs[$i][name];
}
if($rs[$i][isdir])
{
$str.="<span style='color:#CCCCCC'>".$name."</span>";
}
else
{
$str.=$name";
}
$temp = $count 1;
$str = $this->sort_list($str,$rs[$i][id],$temp);
$i ;
}
return $str;
}
  其中$this->sql对象为sql操作类对象,re_datas()函数返回查到的数组,sql_numrows()函数返回查询到的数目

  调用方法:$sort_list = sort_list($sort_list,0,1);
  以上为个人思想,还望大家多多指点。by 5w台灯


Smarty中的分页有很多方法。
  1。使用Smarty的分页插件,如Pager,pagnition,sliding_page等,不过感觉都不是太好,几乎都有一些Bug。
  有兴趣试用和自己去改进的朋友可以看看:
http://smarty.php.net/contribs/plugins/view.php/function.pager.php
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=2327
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=1604
  2。使用分页类库,呵呵,这个网上就太多了,一大把,不过我还没有发现写得很好的,特别是容易扩展的。
  在搜索的时候还看到一个号称分页类终结者的,哈哈,有点好笑。分页类中把SQL都包含进去了,这个是绝对不能容忍的,可以说作者对OO的认识还比较浅。
  不过分页类库不一定适合Smarty,特别是当记录集数据是二维数组时,我不想放弃Smarty方便的Section。这是我没有用PEAR::Pager的原因,否则还要先对数组进行处理,也很麻烦。
  3。自己写啦。。我暂时没有选择写成类库,不过改写很容易,下面主要讲讲思路。
  其实Smarty的分页非常简单,首先我们可以在模板中这样实现:
{$pager_Links}
{section name="list" loop=$productID start=0 max=$pager_Total step=1}
{if ($smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )}
产品名称:{$productName[list]}
产品类别:{$catalogName[list]}
{/if}
{/section}
以上就可以将一个记录集(二维数组)轻松地打印出来,而且限定每页的显示范围。
{$pager_Links} 分页标签(就是上一页,下一页等)
max=$pager_Total 记录总数
$smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )
这一行是用来限定记录的显示范围的,如果记录的索引落在这个范围之内就显示出来,否则就不显示。
以上可以看出,在PHP文件中,我们只需要传递4个变量给Smarty对象:
1.记录总数
2.每页记录起始数
3.每页记录结束数
4.分页标签
以下代码代参考:
标签可以自己去写了,可以扩充成更强大的。现在我没有时间,不然会写一个
<?php
$smartyArr = $smarty->get_template_vars();

//记录总数,每页显示记录条数,总页数
[!--infotagslink--]

相关文章

  • PHP添加MongoDB扩展实例教程

    由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
  • php中eval()函数操作数组的方法

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

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • mybatis-plus 返回部分字段的解决方式

    这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 浅谈Vue开发人员的7个最好的VSCode扩展

    这篇文章主要介绍了浅谈Vue开发人员的7个最好的VSCode扩展,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。1、线...2015-11-08
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07