公式マニュアル (http://us.php.net/manual/en/function.natsort.php)
コードをコピー コードは次のとおりです。
bool natsort ( array &$array )
この関数は、キー/値を維持しながら人間が行う方法で英数字文字列を並べ替える並べ替えアルゴリズムを実装します。この関数は、キーと値の関連付けを維持しながら、人間が行うような方法で英数字文字列を並べ替えるアルゴリズムを実装します。このアルゴリズムと通常のコンピューター文字列並べ替えアルゴリズムの違いの例として説明されています。 (sort() で使用) は以下の例で見ることができます。
コードをコピー コードは次のとおりです:
// ext/standard/array.c から抽出された関連コードは次のとおりです。以下のように
static int php_array_natural_general_compare(const void *a, const void *b, intfold_case) /* {{{ */
{
Bucket *f, *s
zval *fval; *sval;
zval 1 番目、2 番目;
f = *((バケット **) a);
s = *((バケット **)
fval = *(( zval **) f->pData);
sval = *((zval **) s->pData);
1 番目 = *fval; 2 番目 = *sval ;
if (Z_TYPE_P(fval) != IS_STRING) {
zval_copy_ctor(&first);
Convert_to_string(&second);
}
結果 = strnatcmp_ex(Z_STRVAL(first) )、Z_STRLEN(最初)、Z_STRVAL(2 番目)、Z_STRLEN(2 番目)、fold_case); (fval) != IS_STRING) {
zval_dtor(&first)
}
if (Z_TYPE_P(sval) ! = IS_STRING) {
zval_dtor(&second);
}
結果を返します
}
/* }}} */
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) , intfold_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 (配列), zend_qsort, php_array_natural_case_compare, 0 TSRMLS_CC) == FAILURE) {
y)、zend_qsort、php_array_natural_compare、0 TSRMLS_CC) == FAILURE) {
&array_arg)
自然ソートを使用して配列を並べ替える */
PHP_FUNCTION(natsort)
{
php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); 🎜 >/* }}} */
PHP のカーネル コードを表示するのは初めてですが、長年コードを読んできた経験があるため、カーネル コードの核となる部分を見つけるのは簡単です。この自然な並べ替えアルゴリズムは関数 strnatcmp_ex (ext/standard/strnatcmp.c ファイルの中央にあります) です。