本节内容:
合并 php数组的元素值,且是无重复的合并。
例子:
/**
* 无重复合并多个数组的元素值
* by www.
*/
function array_values()_merge()
{
$argc = func_num_args();
if ($argc == 0) {
return false;
} else if ($argc == 1) {
$arg1 = func_get_arg(0);
if (is_array($arg1)) {
return array_values(array_unique($arg1));
} else {
return array($arg1);
}
} else {
$arg_list = func_get_args();
$arr = array();
for ($i=0; $i<$argc; $i++) {
$arr = array_merge($arr, $arg_list[$i]);
}
return array_values(array_unique($arr));
}
}
//调用示例
$a = array('huanghao');
$b = array('huanghao','zhaodefang','jiangyu');
$c = array('zhaodefang','hh');
print_r(array_values_merge($a, $b, $c));
在linux C编程里,在一个进程里建立一个文件,保持打开状态,然后unlink掉文件,它并不实际删除,而是等到进程结束时,所有的fd都关闭了,才真正清除掉。
在php编程中,用同样的操作方法想得到一个标识一个进程尚在运行的pid文件,未果!
在php中,如果创建一个文件,并保留此文件的引用指针,则无法unlink文件,会报错:Warning: unlink Permiss denied。
如果不保留文件指针或将其unset掉,则文件立即删除了,而不是等到进程结束。
同C编程相比,php不允许删除尚有引用指针的文件。
1,php代码:
$filename = "/tmp/test_php.pid";
$fp = fopen($filename, 'w');
//unset($fp);
unlink($filename);
sleep(6);
2,C程序代码
#include <stdio.h>
int main()
{
char *filename = "/tmp/test_c.pid";
FILE *fp;
fp = fopen(filename, "w");
unlink(filename);
sleep(6);
}
如何在php中检测库或函数是否可用呢?有兴趣的朋友可以参考下文的内容。
1,获取所有可用的模块 - get_loaded_extensions
该函数返回所有已经加载的(可用的)模块。
用法:
print_r(get_loaded_extensions());
?>
2,获取指定模块的可用函数 - get_extension_funcs
该函数返回指定模块所有可用的函数。
传入的参数(模块名称)必须是小写。
用法:
print_r(get_extension_funcs("gd"));
?>
3,获取所有已经定义的函数 - get_defined_functions
该函数返回所有已经定义的函数,包括内置函数和用户自定义函数。
用法:
function myrow($id, $data)
{
return "<tr><th>$id</th><td>$data</td></tr>\n";
}
$arr = get_defined_functions();
print_r($arr);
?>
输出:
(
[internal] => Array
(
[0] => zend_version
[1] => func_num_args
[2] => func_get_arg
[3] => func_get_args
[4] => strlen
[5] => strcmp
[6] => strncmp
...
[750] => bcscale
[751] => bccomp
)
[user] => Array
(
[0] => myrow
)
)
其中 $arr["internal"] 是内置函数, $arr["user"] 是用户自定义函数。
4,检查指定函数是否存在 - function_exists
该函数返回指定函数是否已经定义。
用法:
if (function_exists('imap_open')) {
echo "IMAP functions are available.<br />\n";
} else {
echo "IMAP functions are not available.<br />\n";
}
?>