php 怎么创建数组,在PHP中如何正确创建函数?
tep 1 =>
php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。
Step 2 =>
Makefile.am Makefile.in
是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对config.h.stub和setup.stub也如法炮制。其实setup.stub也没什么用。
Step 3 =>
php3-pconfig.h 头文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr &pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数
下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了
extern PHP_MINIT_FUNCTION(pconfig);
extern PHP_RINIT_FUNCTION(pconfig);
extern PHP_MSHUTDOWN_FUNCTION(pconfig);
PHP_MINFO_FUNCTION(pconfig);
这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。
PHP_FUNCTION(pconfig_test);
如果有多个,还可以继续往下加
PHP_FUNCTION(pconfig_parsefile);
PHP_FUNCTION(pconfig_release); …….
Step 4 =>
接下来我们看最重点的C代码了
function_entry pconfig_functions[] = {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
};
定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂操作的话,可以忽略掉他们,写成
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES
};
Step 5 =>
写你自己的函数
在头文件和function_entry处,我们已经定义了自己的函数pconfig_test,现在我们就来实现pconfig_test的功能。就比如执行两个数相加的和吧。
static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)
{ ......
}
PHP_FUNCTION(pconfig_test)
{
_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
当系统调用pconfig_test时,会调用你的_php3_pconfig_test函数,当然你也可以把_php3_pconfig_test里的内容直接写在PHP_FUNCTION(pconfig_test)中,这样做只是程序结构比较清晰。注意:不要将_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展开后实际上就是php3_pconfig_test!
Step 6 =>
好了,现在我们开始修改configure,在echo $ac_n "checking for MySQL support""... $ac_c" 1>&6的前面(当然,如果你熟悉configure的话,可以加在任何合适的地方)加上下面几句话
if test "${with_pconfig+set}" = set; then
withval="$with_pconfig"
# Add your lib in here
EXTRA_LIBS="$EXTRA_LIBS"
# Add your include path in here
INCLUDES="$INCLUDES"
EXT_SUBDIRS="$EXT_SUBDIRS pconfig"
EXT_LIBS="$EXT_LIBS pconfig/libphpext_pconfig.a"
EXTINFO_DEPS="$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub"
EXT_STATIC="$EXT_STATIC pconfig"
fi
修改internal_functions.c,在头文件定义中加入#include "ext/pconfig/php3_pconfig.h"
在zend_module_entry数组中加入phpext_pconfig_ptr,
Step 7 =>
从新configure,带上需要的参数,不要忘记的是在参数里加入 --with-pconfig
Step 8 =>
index.php3
<? echo pconfig_test(123,678)."
"; ?>
执行%>php index.php3
如何比较两个PHP多维数组?
判断两个多维数组是否相等,或有哪些元素区别。我们可以通过PHP中array_udiff()函数和create_function()方法、strcmp ()等函数来实现比较。
下面我们就结合具体的代码示例,给大家介绍比较两个二维数组的方法。
代码示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//多维数组比较
$color1 = array(array('Red',80),array('Green',70),array('white',60));
$color2 = array(array('Green',70),array('Black',95));
$color = array_udiff($color1,$color2,create_function(
'$a,$b','return strcmp(implode("",$a),implode("",$b));')
);
echo "<pre>";
print_r($color);
此段代码中,我们就可以得出$color1数组相对于$color2数组有哪些不同的数组元素。
输出比较结果如下:
ff44dfd3ad9a71ec1976a4de9a645c9.png
函数介绍:
1、array_udiff : 用回调函数比较数据来计算数组的差集
1
array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func ) : array
使用回调函数比较数据,计算数组的不同之处。和 array_diff() 不同的是,前者使用内置函数进行数据比较。
参数array1表示第一个数组。array2第二个数组。value_compare_func回调对照函数。
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
callback ( mixed $a, mixed $b ) : int
返回值,返回 array1 里没有出现在其他参数里的所有值。
2、create_function:创建一个匿名函数
1
create_function ( string $args , string $code ): string
根据传递的参数创建匿名函数,并为其返回唯一名称。
通常这些参数将作为单引号分隔的字符串传递。使用单引号字符串的原因是为了保护变量名称不被解析,否则,如果使用双引号,则需要转义变量名称,例如\ $ avar。
args表示函数参数。code表示功能代码。
返回值是以字符串或FALSE错误形式返回唯一函数名称。
3、strcmp :二进制安全字符串比较
1
strcmp ( string $str1 , string $str2 ) : int
注意该比较区分大小写。
参数str1表示第一个字符串。str2表示第二个字符串。
返回值是如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
4、implode:将一个一维数组的值转化为字符串
本篇文章就是关于比较两个PHP多维数组的方法介绍,也很简单易懂,希望对需要的朋友有所帮助!
php混合数组解释?
您好,混合数组一般是由关联数组跟索引数组组成的数组!如:array("张三","age"=>25," address"=>"北京"),类似这种的就可以称为混合数组!
php怎么把接受到的数据循环的添加到数组?
遍历数据表,把相应的数据放到数组中即可例如:<
?php//定义一个数组,用于保存读取到的数据$contents = array();$query = mysql_query("select * from table")
;//遍历数据表while($array = mysql_fetch_array($query)){$contents[] = $array;
}print_r($contents)
;//然后循环数组,或者通过键名使用数组foreach($contents as $value){print_r($value);}echo $contents[0]['字段名称'];?>
PHP判断多维数组值的大小?
$arr = [ [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]];echo count($arr); // 3 二维数组长度echo count($arr[0]);// 5 二维数组子数组长度echo count($arr[1]);// 8 二维数组子数组长度你可以去后盾人平台看看,里面的东西不错