PHP多维数组排序函数 array_multisort() 实例讲解

 更新时间:2016年11月25日 16:45  点击:1660
array_multisort() 函数对多个数组或多维数组进行排序。参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

一、先看最简单的情况。

有两个数组:

$arr1 = array(1, 9, 5);
$arr2 = array(6, 2, 4);

array_multisort($arr1, $arr2);

print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。我们再加多一个数组看看会怎样:

$arr1 = array(1, 9, 5);
$arr2 = array(6, 2, 4);
$arr3 = array(3, 7, 8);

array_multisort($arr1, $arr2, $arr3);

查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。

另外,也可以把每个数组想像成数据库表的一列。而对应着的1, 6, 3为一数据行,9, 2, 7为另一数据行,5, 4, 8 另一行。

array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。

具体可以用下面的程式来测试:

$arr1 = array(1, 9, 5, 9);
$arr2 = array(6, 2, 4, 1);
$arr3 = array(3, 7, 8, 0);

array_multisort($arr1, $arr2, $arr3);

可以想像这里$arr3的结果是(3, 8, 0, 7)。

二、接下来讲解array_multisort的参数。

这个函数的参数很灵活。最简单的情况是如上面所示的以1个或n个数组作为参数,需要注意的是每个数组的项数要一样,否则会warning导致排序失效。

像这样array_multisort($arr1, $arr2, $arr3); 默认是所有数组都是升序排列,如果想对$arr2降序,并当作字符串去比较,就要写成:

    array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);

每个array后面可以跟一个排序顺序标志或一个排序类型标志,或者两种标志同时出现。但是每种排序标志在每个数组后面只能出现一个。

详细如下:

排序顺序标志:

    SORT_ASC - 按照上升顺序排序(默认)
    SORT_DESC - 按照下降顺序排序

排序类型标志:

    SORT_REGULAR - 将项目按照通常方法比较(默认)
    SORT_NUMERIC - 将项目按照数值比较
    SORT_STRING - 将项目按照字符串比较

 

三、最后是array_multisort有什么实际作用。

我们通常有一些多维数组需要排序:

$guys = array(
    array(
        'name' => 'jake',
        'score' => 80,
        'grade' => 'A'
    ),
    array(
        'name' => 'jin',
        'score' => 70,
        'grade' => 'A'
    ),
    array(
        'name' => 'john',
        'score' => 80,
        'grade' => 'A'
    ),
    array(
        'name' => 'ben',
        'score' => 20,
        'grade' => 'B'
    )
);

例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。

这时我们就需要根据$guys的顺序多弄两个数组出来:

$scores = array(80, 70, 80, 20);
$names = array('jake', 'jin', 'john', 'ben');

然后

array_multisort($scores, SORT_DESC, $names, $guys);

就行了。

还能不能更灵活一点呢,每次想排序都要另外弄些数组出来吗?

其实可以经封装几个函数:

<?php
/**
 * 根据指定的键对数组排序
 *
 * 用法:
 * <code>
 * $rows = array(
        array('id' => 1, 'value' => '1-1', 'parent' => 1),
        array('id' => 2, 'value' => '2-1', 'parent' => 1),
        array('id' => 3, 'value' => '3-1', 'parent' => 1),
        array('id' => 4, 'value' => '4-1', 'parent' => 2),
        array('id' => 5, 'value' => '5-1', 'parent' => 2),
        array('id' => 6, 'value' => '6-1', 'parent' => 3),
    );
 *
 * $rows = list_sortByCol($rows, 'id', SORT_DESC);
 * dump($rows);
 * // 输出结果为:
 * // array(
 * // array('id' => 6, 'value' => '6-1', 'parent' => 3),
 * // array('id' => 5, 'value' => '5-1', 'parent' => 2),
 * // array('id' => 4, 'value' => '4-1', 'parent' => 2),
 * // array('id' => 3, 'value' => '3-1', 'parent' => 1),
 * // array('id' => 2, 'value' => '2-1', 'parent' => 1),
 * // array('id' => 1, 'value' => '1-1', 'parent' => 1),
 * // )
 * </code>
 *
 * @param array $array 要排序的数组
 * @param string $keyname 排序的键
 * @param int $dir 排序方向
 * @return array 排序后的数组
*/
function list_sortByCol($array, $keyname, $dir = SORT_ASC)
{
    return list_sortByMultiCols($array, array($keyname => $dir));
}

/**
* 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
*
* 用法:
* <code>
* $rows = list_sortByMultiCols($rows, array(
    'parent' => SORT_ASC,
    'name' => SORT_DESC,
* ));
* </code>
*
* @param array $rowset 要排序的数组/行集
* @param array $args 排序的键
*
* @return array 排序后的数组
*/
function list_sortByMultiCols($rowset, $args)
{
    $sortArray = array();
    $sortRule = '';

    foreach ($args as $sortField => $sortDir)
    {
        foreach ($rowset as $offset => $row)
        {
            $sortArray[$sortField][$offset] = $row[$sortField];
        }
        $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';
    }

    if (empty($sortArray) || empty($sortRule))
    {
        return $rowset;
    }
    eval('array_multisort(' . $sortRule . '$rowset);');

    return $rowset;
}



PHP二维数组排序(sort_array)

/**
 * 对二维数组进行排序
 * 模拟 数据表记录按字段排序
 *
 * <code>
 *  @list_sort($list, $get['orderKey'], $get['orderType']);
 * </code>
 * @param array $array 要排序的数组
 * @param string $orderKey 排序关键字/字段
 * @param string $orderType 排序方式,'asc':升序,'desc':降序
 * @param string $orderValueType 排序字段值类型,'number':数字,'string':字符串
 */
function list_sort(&$array, $orderKey, $orderType = 'asc', $orderValueType = 'string')
{
    if (is_array($array))
    {
        $orderArr = array();
        foreach ($array as $val)
        {
            $orderArr[] = $val[$orderKey];
        }
        $orderType = ($orderType == 'asc') ? SORT_ASC : SORT_DESC;
        $orderValueType = ($orderValueType == 'string') ? SORT_STRING : SORT_NUMERIC;
        array_multisort($orderArr, $orderType, $orderValueType, $array);
    }
}

应用:

@sort_array($list, $get['sort'], $get['order'], "string");

Socket接口在php一些比较高级的开发中都会用到Socket函数了,下面我们来看看关于php Socket函数的用法方法,具体的细节如下所示。

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:

1.         什么是TCP/IP、UDP?
2.         Socket在哪里呢?
3.         Socket是什么呢?
4.         你会使用它们吗?

什么是TCP/IP、UDP?

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。
这里有一张图,表明了这些协议的关系。

TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。

在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。

Socket是什么呢?

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP /IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
你会使用它们吗?
前人已经给我们做了好多的事了,网络间的通信也就简单了许多,但毕竟还是有挺多工作要做的。以前听到Socket编程,觉得它是比较高深的编程知识,但是只要弄清Socket编程的工作原理,神秘的面纱也就揭开了。
一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电 话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待 客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户 端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
socket相关函数:
———————————————————————————————-
socket_accept() 接受一个Socket连接
socket_bind() 把socket绑定在一个IP地址和端口上
socket_clear_error() 清除socket的错误或者最后的错误代码
socket_close() 关闭一个socket资源
socket_connect() 开始一个socket连接
socket_create_listen() 在指定端口打开一个socket监听
socket_create_pair() 产生一对没有区别的socket到一个数组里
socket_create() 产生一个socket,相当于产生一个socket的数据结构
socket_get_option() 获取socket选项
socket_getpeername() 获取远程类似主机的ip地址
socket_getsockname() 获取本地socket的ip地址
socket_iovec_add() 添加一个新的向量到一个分散/聚合的数组
socket_iovec_alloc() 这个函数创建一个能够发送接收读写的iovec数据结构
socket_iovec_delete() 删除一个已经分配的iovec
socket_iovec_fetch() 返回指定的iovec资源的数据
socket_iovec_free() 释放一个iovec资源
socket_iovec_set() 设置iovec的数据新值
socket_last_error() 获取当前socket的最后错误代码
socket_listen() 监听由指定socket的所有连接
socket_read() 读取指定长度的数据
socket_readv() 读取从分散/聚合数组过来的数据
socket_recv() 从socket里结束数据到缓存
socket_recvfrom() 接受数据从指定的socket,如果没有指定则默认当前socket
socket_recvmsg() 从iovec里接受消息
socket_select() 多路选择
socket_send() 这个函数发送数据到已连接的socket
socket_sendmsg() 发送消息到socket
socket_sendto() 发送消息到指定地址的socket
socket_set_block() 在socket里设置为块模式
socket_set_nonblock() socket里设置为非块模式
socket_set_option() 设置socket选项
socket_shutdown() 这个函数允许你关闭读、写、或者指定的socket
socket_strerror() 返回指定错误号的详细错误
socket_write() 写数据到socket缓存
socket_writev() 写数据到分散/聚合数组
案例一:socket通信演示
服务器端:
//py by http://my.oschina.net/cart
<?php
//确保在连接客户端时不会超时
set_time_limit(0);

$ip = CALL_USER_FUNC函数可以调用或执行函数了,第一次看到CALL_USER_FUNC函数使用在dz论坛的二次开发中了,下面我们一起来看看CALL_USER_FUNC用法。


使用call_user_func函数,通过传入字符串函数,可以调用自定义函数,并且支持引用。

1.mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

调用第一个参数提供的自定义函数,后面的参数为自定义函数的参数,返回自定义函数的结果


function say($word)
{
    echo $word;
}
call_user_func('say', 'hello world'); //hello world


使用call_user_func可以执行一个类的某个方法,而且可以给方法传参数,它跟实例化一个类再调用方法有什么区别呢?看下面的例子。

class A
{
    public function __Construct($a,$b,$c)
    {
        echo 'Construct'.$a.$b.$c;
    }
 
    public function test($a,$b,$c)
    {
        echo ' test'.$a.$b.$c;
    }
}
 
$a = new A(1,2,3);
$a->test(1,2,3);
 
call_user_func(['A','test'],1,2,3);

类A有一个构造方法,如果用实例化的方式new A,会执行构造函数,而使用call_user_func的方式调用test方法,并没有出发构造函数,虽然都可以执行到方法,这就是两者的区别。

那么在有的情况下,并不能直接实例化一个类,希望通过其他方式去得到一个类,而且能够执行类的构造方法怎么办?

此时可以使用类的反射类和newInstanceArgs来创建一个新的类的实例,代码如下:

 

$reflection = new ReflectionClass('A');
$newclass = $reflection->newInstanceArgs([1,2,3]);
$newclass->test(1,2,3);

它的效果等同于:


$a = new A(1,2,3);
$a->test(1,2,3);

具体可以参见

首先定义一个类A,用ReflectionClass得到A的反射类对象,通过ReflectionClass对象可以得到类的各种属性,包括命名空间,父类,类名等,使用newInstanceArgs可以传入构造函数的参数创建一个新的类的实例。

class A
{
    public $name;
 
    public function __Construct($name,$des)
    {
        $this->name = $name.','.$des;
    }
    public function aa()
    {
        echo $this->name;
    }
}
 
$class = new ReflectionClass('A');
 
$aaa = $class->newInstanceArgs(['www.111cn.net','blog']);
 
$aaa->aa();

输出结果:www.111cn.net,blog

以上示例中的$aaa即是通过newInstanceArgs创建的一个新的A类的实例,因此它可以调用A类的方法aa(),值得注意的是newInstanceArgs创建新类必须传参,也就是要求这个类要有构造方法。

IS_CALLABLE 函数用到比较少它的作用是检测参数是否为合法的可调用结构了,下文我们来看看这个函数的用法及返回的结果如何。


PHP的is_callable用于检测一个函数或者一个类的方法是否可执行,用官方文档的话说就是检测参数是否为合法的可调用结构,代码示例如下。

class A
{
    public function __construct(){
        echo 'Class:'.get_called_class();
    }
 
    public function cc(){
        $a = 3;
        return $a;
    }
}
 
$a = new A;
 
$test = is_callable(array('A','cc'));
var_dump($test);exit;
打印结果:
Class:A
boolean true

官方示例:

function someFunction() 

{

}

 

$functionVariable = 'someFunction';

 

var_dump(is_callable($functionVariable, false, $callable_name));  // bool(true)

 

echo $callable_name, "\n";  // someFunction

 

//

//  Array containing a method

//

 

class someClass {

 

  function someMethod() 

  {

  }

 

}

 

$anObject = new someClass();

 

$methodVariable = array($anObject, 'someMethod');

 

var_dump(is_callable($methodVariable, true, $callable_name));  //  bool(true)

 

echo $callable_name, "\n";  //  someClass::someMethod

官方示例分别是一个检测函数,和一个检测类的方法,以及更具体的用法。

例子

演示代码如下:

<?php

class test {

 static function a() {

  return "test";

 }

}

class abc {

 public function a($Object,$funcName){ 

  if (!is_callable(array($Object,$funcName))){//此处array($object,$funcname)的用法,相当于$object::$funcname调用$object的$funcname方法

   echo("Error");

  }else {

   echo("OK");

  }

 }

}

 

$abc=new abc();

$abc->a("test","aa");//test类下没有aa方法,会输出error

$abc->a("test","a");//test类下有a方法,会输出ok

?>

 

OK ,这个函数的用法

 

unset() 销毁指定的变量。注意在 PHP 3 中,unset() 将返回 TRUE(实际上是整型值 1),而在 PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset() 的返回值将导致解析错误。

 先来看unset函数语法

unset

删除变量。

语法: int unset(mixed var);

返回值: 整数

函数种类: PHP 系统功能

内容说明

本函数将变量删除,成功则返回 true 值。

首先让我们看一个例子

    var_dump(memory_get_usage());
    $a = "laruence";
    var_dump(memory_get_usage());
    unset($a);
    var_dump(memory_get_usage());

输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同):

    int(90440)
    int(90640)
    int(90472

注意到 90472-90440=32, 于是就有了各种的结论, 有的人说PHP的unset并不真正释放内存, 有的说, PHP的unset只是在释放大变量(大量字符串, 大数组)的时候才会真正free内存, 更有人说, 在PHP层面讨论内存是没有意义的.

那么, 到底unset会不会释放内存? 这32个字节跑哪里去了?

要回答这个问题, 我将从俩个方面入手:
这32个字节去哪里了

首先我们要打破一个思维: PHP不像C语言那样, 只有你显示的调用内存分配相关API才会有内存的分配.
也就是说, 在PHP中, 有很多我们看不到的内存分配过程.
比如对于:

    $a = "laruence";

隐式的内存分配点就有:

    1. 为变量名分配内存, 存入符号表
    2. 为变量值分配内

所以, 不能只看表象.
第二, 别怀疑,PHP的unset确实会释放内存(当然, 还要结合引用和计数, 这部分的内容请参看我之前的文章深入理解PHP原理之变量分离/引用), 但这个释放不是C编程意义上的释放, 不是交回给OS.
对于PHP来说, 它自身提供了一套和C语言对内存分配相似的内存管理API,这些API和C的API意义对应, 在PHP内部都是通过这些API来管理内存的.

当我们调用emalloc申请内存的时候, PHP并不是简单的向OS要内存, 而是会像OS要一个大块的内存, 然后把其中的一块分配给申请者, 这样当再有逻辑来申请内存的时候, 就不再需要向OS申请内存了, 避免了频繁的系统调用.

比如如下的例子:

    <?php
    var_dump(memory_get_usage(TRUE)); //注意获取的是real_size
    $a = "laruence";
    var_dump(memory_get_usage(TRUE));
    unset($a);
    var_dump(memory_get_usage(TRUE));

输出:

    int(262144)
    int(262144)
    int(262144

也就是我们在定义变量$a的时候, PHP并没有向系统申请新内存.

同 样的, 在我们调用efree释放内存的时候, PHP也不会把内存还给OS, 而会把这块内存, 归入自己维护的空闲内存列表. 而对于小块内存来说, 更可能的是, 把它放到内存缓存列表中去(后记, 某些版本的PHP, 比如我验证过的PHP5.2.4, 5.2.6, 5.2.8, 在调用get_memory_usage()的时候, 不会减去内存缓存列表中的可用内存块大小, 导致看起来, unset以后内存不变).

现在让我来回答这32个字节跑哪里去了, 就向我刚才说的, 很多内存分配的过程不是显式的, 看了下面的代码你就明白了:

    <?php
    var_dump("I am www.111cn.net");
    var_dump(memory_get_usage());
    $a = "laruence";
    var_dump(memory_get_usage());
    unset($a);
    var_dump(memory_get_usage());

输出:

    string(43) "I am www.111cn.net"
    int(90808) //赋值前
    int(90976)
    int(90808) //是的, 内存正常释放

90808-90808 = 0, 正常了, 也就是说这32个字节是被输出函数给占用了(严格来说, 是被输出的Header占用了)

 
只增不减的数组

Hashtable是PHP的核心结构(了解Hashtable, 可以参看我之前的文章深入理解PHP之数组(遍历顺序)), 数组也是用她来表示的, 而符号表也是一种关联数组, 对于如下代码:

    var_dump("I am www.111cn.net");
    var_dump(memory_get_usage());
    $array = array_fill(1, 100, "laruence");
    foreach ($array as $key => $value) {
        ${$value . $key} = NULL;
    }
    var_dump(memory_get_usage());
    foreach ($array as $key=> $value) {
        unset(${$value . $key});
    }
    var_dump(memory_get_usage());

我们定义了100个变量, 然后又按个Unset了他们, 来看看输出:

    string(43) "I am www.111cn.net"
    int(93560)
    int(118848)
    int(104448

Wow, 怎么少了这么多内存?
这是因为对于Hashtable来说, 定义它的时候, 不可能一次性分配足够多的内存块, 来保存未知个数的元素, 所以PHP会在初始化的时候, 只是分配一小部分内存块给HashTable, 当不够用的时候再RESIZE扩容,

而Hashtable, 只能扩容, 不会减少, 对于上面的例子, 当我们存入100个变量的时候, 符号表不够用了, 做了一次扩容, 而当我们依次unset掉这100个变量以后, 变量占用的内存是释放了(118848 – 104448), 但是符号表并没有缩小, 所以这些少的内存是被符号表本身占去了…

现在, 你是不是对PHP的内存管理有了一个初步的认识了呢?

如果还没明白再来看例子先看一个例子:

<?php 
$s=str_repeat('1',255);  //产生由255个1组成的字符串 
$m=memory_get_usage();  //获取当前占用内存 
unset($s); 
$mm=memory_get_usage();  //unset()后再查看当前占用内存 
echo $m-$mm; 
?> 

最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者说,unset()之后内存占用减少了),可是我在PHP5和windows平台下,得到的结果是:-48。这是否可以说明,unset($s)并没有起到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

<?php 
$s=str_repeat('1',256);  //产生由256个1组成的字符串 
$m=memory_get_usage();  //获取当前占用内存 
unset($s); 
$mm=memory_get_usage();  //unset()后再查看当前占用内存 
echo $m-$mm; 
?> 

这个例子,和上面的例子几乎相同,唯一的不同是,$s由256个1组成,即比第一个例子多了一个1,得到结果是:224。这是否可以说明,unset($s)已经将$s所占用的内存销毁了?

通过上面两个例子,我们可以得出以下结论:结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

那么是不是只要变量值超过256,使用unset就可以释放内存空间呢?我们再通过一个例子来测试一下:

<?php 
$s=str_repeat('1',256);  //这和第二个例子完全相同 
$p=&$s; 
$m=memory_get_usage(); 
unset($s);  //销毁$s 
$mm=memory_get_usage(); 
echo $p.'<br />'; 
echo $m-$mm; 
?> 

刷新页面,我们看到第一行有256个1,第二行是-48,按理说我们已经销毁了$s,而$p只是引用$s的变量,应该是没有内容了,另外,unset($s)后内存占用却比unset()前增加了!现在我们再做以下的例子:

<?php 
$s=str_repeat('1',256);  //这和第二个例子完全相同 
$p=&$s; 
$m=memory_get_usage(); 
$s=null;  //设置$s为null 
$mm=memory_get_usage(); 
echo $p.'<br />'; 
echo $m-$mm; 
?>

 现在刷新页面,我们看到,输出$p已经是没有内容了,unset()前后内存占用量之差是224,即已经清除了变量占用的内存。本例中的$s=null也可以换成unset(),如下:

<?php 
$s=str_repeat('1',256);  //这和第二个例子完全相同 
$p=&$s; 
$m=memory_get_usage(); 
unset($s);  //销毁$s 
unset($p); 
$mm=memory_get_usage(); 
echo $p.'<br />'; 
echo $m-$mm; 
?> 

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

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

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...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
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • C#中加载dll并调用其函数的实现方法

    下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#虚函数用法实例分析

    这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25