ホームページ  >  記事  >  バックエンド開発  >  PHP ソースコードに関する簡単な説明 19: array_file、range 関数について

PHP ソースコードに関する簡単な説明 19: array_file、range 関数について

不言
不言オリジナル
2018-06-28 17:41:161949ブラウズ

この記事では、主に PHP ソース コードに関する第 19 回の簡単な説明を紹介します。array_file 関数と range 関数については、必要な方は参考にしてください。 PHP ソースコードに関する簡単な説明 19: array_file、range 関数について

array_fill

(PHP 4 >= 4.2.0, PHP 5)


array_fill — 指定された値で配列を埋めるvalue

説明

array array_fill (int start_index, int num,mi​​xed value)

array_fill() value パラメータの値を使用して、指定されたキー名から始まる num 個のエントリで配列を埋めます。 start_index パラメータ。 num はゼロより大きい数値である必要があることに注意してください。そうでない場合、PHP は警告を発行します。

パラメータ start_index には、文字列、整数、および浮動小数点型のみを指定できます。

ソース コードは次のとおりです。

switch (Z_TYPE_PP(start_key)) {case IS_STRING:case IS_LONG:case IS_DOUBLE:
    .......    convert_to_long_ex(start_key);
    ......}

プログラムは、最初の値を return_value に代入します。 num – 1 回ループします: この値に refcount を追加し、return_value

range

(PHP 3 >= 3.0.8, PHP 4, PHP 5)# のハッシュ テーブルに追加します。

## range - 指定した範囲内のセルを含む配列を作成します
Description

配列範囲 (混合低、混合高 [, 数値ステップ])


range() は、次のセルを返します。配列内で下位から上位まで (自分自身を含む)。 Low > High の場合、シーケンスは High から Low に進みます。

新しいパラメータ: オプションの step パラメータが PHP 5.0.0 で新たに追加されました。

ステップの値が指定されている場合、それがユニット間のステップ値として使用されます。ステップは正の値である必要があります。指定しない場合、ステップはデフォルトの 1 になります。

コードからわかるように、この関数は文字配列、浮動小数点配列、および整数配列のみをサポートし、増加形式と減少形式の両方をサポートします (バージョン 4.0.1 以降でのみ使用可能)

文字配列を使用する例:

 if (Z_TYPE_P(zlow) == IS_STRING && Z_TYPE_P(zhigh) == IS_STRING && Z_STRLEN_P(zlow) >= 1 && Z_STRLEN_P(zhigh) >= 1) {
    int type1, type2;
    unsigned char *low, *high;
    long lstep = (long) step; 
    type1 = is_numeric_string(Z_STRVAL_P(zlow), Z_STRLEN_P(zlow), NULL, NULL, 0);
    type2 = is_numeric_string(Z_STRVAL_P(zhigh), Z_STRLEN_P(zhigh), NULL, NULL, 0);
    if (type1 == IS_DOUBLE || type2 == IS_DOUBLE || is_step_double) {
        goto double_str;
    } else if (type1 == IS_LONG || type2 == IS_LONG) {
        goto long_str;
    }
    convert_to_string(zlow);    //    转化为字符串,此函数的实现在zend_operators.c的536行:ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC)
    convert_to_string(zhigh);
    low = (unsigned char *)Z_STRVAL_P(zlow);    //    当所给字符串长度大于1时,取第一个字符
    high = (unsigned char *)Z_STRVAL_P(zhigh);     if (*low > *high) { //    递减数组
    if (lstep <= 0) {
        err = 1;
        goto err;
    }
    for (; *low >= *high; (*low) -= (unsigned int)lstep) {
        add_next_index_stringl(return_value, low, 1, 1);
        if (((signed int)*low - lstep) < 0) {
            break;
        }
    }
    } else if (*high > *low) { //    递增数组
    if (lstep <= 0) {
        err = 1;
        goto err;
    }
    for (; *low <= *high; (*low) += (unsigned int)lstep) {
        add_next_index_stringl(return_value, low, 1, 1);
        if (((signed int)*low + lstep) > 255) {    //    只支持ASCII的255个字符
            break;
        }
    }
    } else {    //    开始和结束相等,则只返回包含一个元素的数组
        add_next_index_stringl(return_value, low, 1, 1);}

浮動小数点と整数の処理は基本的に似ていますが、ハッシュ テーブルへの書き込み方法が異なるだけです

浮動小数点型は add_next_index_double を使用します

整数型は使用しますadd_next_index_long

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP ソース コード 18 についての簡単な説明: array_diff_key、array_diff_assoc、array_udiff_assoc について Function

PHP ソース コード 16 についての簡単な説明: array_count_values について function

以上がPHP ソースコードに関する簡単な説明 19: array_file、range 関数についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。