天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php natsort內(nèi)核函數(shù)淺析第1/2頁(yè)

官方手冊(cè)(http://us.php.NET/manual/en/function.natsort.php
復(fù)制代碼 代碼如下:
bool natsort ( array &$array )
This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations. This is described as a "natural ordering". An example of the difference between this algorithm and the regular computer string sorting algorithms (used in sort()) can be seen in the example below.

據(jù)官方手冊(cè)還可以得到這樣的結(jié)果:

img1.png img2.png img10.png img12.png

顯然這很適合對(duì)類(lèi)似文件名的排序。從結(jié)果看這種自然算法應(yīng)該是去掉頭和尾的非數(shù)字部分,然后對(duì)留下來(lái)的數(shù)字部分進(jìn)行排序,究竟是不是,還是看一下php源碼吧。
復(fù)制代碼 代碼如下:
//從ext/standard/array.c抽取的相關(guān)代碼如下
static int php_array_natural_general_compare(const void *a, const void *b, int fold_case) /* {{{ */
{
    Bucket *f, *s;
    zval *fval, *sval;
    zval first, second;
    int result;
    f = *((Bucket **) a);
    s = *((Bucket **) b);
    fval = *((zval **) f->pData);
    sval = *((zval **) s->pData);
    first = *fval;
    second = *sval;
    if (Z_TYPE_P(fval) != IS_STRING) {
        zval_copy_ctor(&first);
        convert_to_string(&first);
    }
    if (Z_TYPE_P(sval) != IS_STRING) {
        zval_copy_ctor(&second);
        convert_to_string(&second);
    }
    result = strnatcmp_ex(Z_STRVAL(first), Z_STRLEN(first), Z_STRVAL(second), Z_STRLEN(second), fold_case);
    if (Z_TYPE_P(fval) != IS_STRING) {
        zval_dtor(&first);
    }
    if (Z_TYPE_P(sval) != IS_STRING) {
        zval_dtor(&second);
    }
    return result;
}
/* }}} */
static int php_array_natural_compare(const void *a, const void *b TSRMLS_DC) /* {{{ */
{
    return php_array_natural_general_compare(a, b, 0);
}
/* }}} */
static void php_natsort(INTERNAL_FUNCTION_PARAMETERS, int fold_case) /* {{{ */
{
    zval *array;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) {
        return;
    }
    if (fold_case) {
        if (zend_hash_sort(Z_ARRVAL_P(array), zend_qsort, php_array_natural_case_compare, 0 TSRMLS_CC) == FAILURE) {
            return;
        }
    } else {
        if (zend_hash_sort(Z_ARRVAL_P(array), zend_qsort, php_array_natural_compare, 0 TSRMLS_CC) == FAILURE) {
            return;
        }
    }
    RETURN_TRUE;
}
/* }}} */
/* {{{ proto void natsort(array &array_arg)
Sort an array using natural sort */
php_FUNCTION(natsort)
{
    php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */

雖然是第一次查看php的內(nèi)核代碼,不過(guò)憑借多年看代碼的經(jīng)驗(yàn),還是很容易找到這個(gè)自然排序算法的核心就是函數(shù):strnatcmp_ex(位于ext/standard/strnatcmp.c文件中)。

php技術(shù)php natsort內(nèi)核函數(shù)淺析第1/2頁(yè),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 偷柏自拍亚洲综合在线 | 午夜一个人在线观看完整版 | 成人在线小视频 | 亚洲精品AV无码永久无码 | 男同志在线观看 | 久久99国产综合精品AV蜜桃 | 99热在线视频这里只精品 | 国内九一激情白浆发布 | 国产69精品久久久久无码麻豆 | 女人被躁到高潮嗷嗷叫69 | 俄罗斯粗大猛烈18P 俄罗斯雏妓的BBB孩交 | 无码欧美毛片一区二区三在线视频 | 麻豆啊传媒app黄版破解免费 | 日本一本道高清码v | 秋霞影音先锋一区二区 | 青娱乐在线一区 | 无限资源在线观看8 | 被吊起玩弄的女性奴 | 秋霞网韩国理伦片免费看 | 免费毛片a在线观看67194 | 国产精品免费视频能看 | 国产综合91 | AAA级精品无码久久久国片 | 综合人妻久久一区二区精品 | 忘忧草研究院一二三 | 男人插女人动态 | 免费麻豆国产黄网站在线观看 | 蕾丝边娱乐网 | 日本精品久久久久中文字幕 1 | 老熟女毛茸茸浓毛 | YELLOW日本动漫高清免费 | 国内精品久久久久影院网站 | 国产高清视频免费在线观看 | 国产精品内射久久久久欢欢 | 抽插内射高潮呻吟爆乳 | 奶头好翘是不是想要了 | 最近的2019中文字幕国语完整版 | 久久精品一区二区影院 | 91精品在线国产 | 欧美午夜不卡在线观看 | 麻豆AV久久无码精品九九 |