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

php natsort內核函數淺析第1/2頁

官方手冊(http://us.php.NET/manual/en/function.natsort.php
復制代碼 代碼如下:
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.

據官方手冊還可以得到這樣的結果:

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

顯然這很適合對類似文件名的排序。從結果看這種自然算法應該是去掉頭和尾的非數字部分,然后對留下來的數字部分進行排序,究竟是不是,還是看一下php源碼吧。
復制代碼 代碼如下:
//從ext/standard/array.c抽取的相關代碼如下
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的內核代碼,不過憑借多年看代碼的經驗,還是很容易找到這個自然排序算法的核心就是函數:strnatcmp_ex(位于ext/standard/strnatcmp.c文件中)。

php技術php natsort內核函數淺析第1/2頁,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 手机在线观看mv网址 | 精品国产乱码久久久久久免费流畅 | 国产精品无码亚洲区艳妇 | 国产成a人片在线观看视频99 | 黄页网站18以下勿看免费 | 午夜DV内射一区二区 | 日本十八禁无遮拦啪啪漫画 | 麻豆AV久久AV盛宴AV | 在教室伦流澡到高潮H女攻视频 | 粉嫩国产14xxxxx0000 | 男人和女人一起愁愁愁很痛 | 色偷偷网站 | 飘雪在线观看免费完整版 | 捆绑白丝粉色JK震动捧喷白浆 | 久青草国产在线视频亚瑟影视 | 老妇xxxxbbbb| 四虎永久在线精品国产免费 | 久久日韩精品无码一区 | 国产亚洲精品久久久久久国 | 内射爽无广熟女亚洲 | 欧美大片免费 | 国产福利视频一区二区 | 91亚洲 欧美 国产 制服 动漫 | 小SAO货边洗澡边CAO你动漫 | 最新无码国产在线视频2020 | 97免费人妻在线观看 | 午夜福利理论片在线播放 | 精品国产乱码久久久久乱码 | 18禁止看的免费污网站 | 欧美片内射欧美美美妇 | 7723日本高清完整版在线观看 | 精品亚洲国产成AV人片传媒 | 秋霞最新高清无码鲁丝片 | 欧美视频 亚洲视频 | 久久麻豆亚洲AV成人无码国产 | 暖暖日本在线手机免费完整版 | 天天操人人射 | 午夜在线观看免费完整直播网 | 日本三级按摩推拿按摩 | 亚洲精品无码AV中文字幕蜜桃 | 久久久无码精品无码国产人妻丝瓜 |