Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion zum PHP-Quellcode 19: Über array_file, Bereichsfunktionen

Eine kurze Diskussion zum PHP-Quellcode 19: Über array_file, Bereichsfunktionen

不言
不言Original
2018-06-28 17:41:161924Durchsuche

Dieser Artikel führt hauptsächlich einen kurzen Vortrag über den PHP-Quellcode 19 ein: In Bezug auf die Funktionen array_file und range hat er einen bestimmten Referenzwert. Jetzt kann ich ihn mit Ihnen teilen.

A Kurzer Vortrag über PHP-Quellcode 19: Bezüglich array_file, Bereichsfunktion

array_fill
(PHP 4 >= 4.2.0, PHP 5)

array_fill – füllt das Array
mit dem angegebenen Wert Beschreibung
array array_fill (int start_index, int num, gemischter Wert)

array_fill() füllt ein Array mit num Einträgen unter Verwendung des Werts des Wertparameters, beginnend mit dem durch angegebenen Schlüsselnamen der start_index-Parameter. Beachten Sie, dass num eine Zahl größer als Null sein muss, sonst gibt PHP eine Warnung aus.

Der Parameter start_index kann nur vom Typ String, Ganzzahl und Gleitkomma sein
Der Quellcode lautet wie folgt:

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

Das Programm weist zuerst den ersten Wert return_value zu und führt dann eine Schleife durch num – 1 Mal: ​​Refcount zu diesem Wert hinzufügen und zur Hash-Tabelle von return_value

range
(PHP 3 >= 3.0.8, PHP 4, PHP 5)

Bereich – Erstellen Sie ein Array mit Zellen im angegebenen Bereich.

Beschreibung
Array-Bereich (gemischt niedrig, gemischt hoch [, Zahlenschritt])

range() gibt die Zellen von niedrig nach hoch zurück das Array, einschließlich sich selbst. Wenn niedrig > hoch, wechselt die Sequenz von hoch nach niedrig.

Neue Parameter: Der optionale Schrittparameter wurde in PHP 5.0.0 neu hinzugefügt.

Wenn ein Schrittwert angegeben wird, wird dieser als Schrittwert zwischen Einheiten verwendet. Schritt sollte positiv sein. Wenn nicht angegeben, wird der Schritt standardmäßig auf 1 gesetzt.

Wie aus dem Code ersichtlich ist, unterstützt diese Funktion nur Zeichenarrays, Gleitkommaarrays und Ganzzahlarrays und unterstützt sowohl steigende als auch abnehmende Formen (nur nach Version 4.0.1 verfügbar)

Verwendung von Zeichenarrays Zum Beispiel:

 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);}

Die Verarbeitung von Gleitkomma und Ganzzahl ist grundsätzlich ähnlich, nur die Methode zum Schreiben in die Hash-Tabelle ist unterschiedlich.

Der Gleitkommatyp verwendet add_next_index_double.

Der Ganzzahltyp verwendet add_next_index_long

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Eine kurze Diskussion des PHP-Quellcodes 18: Über array_diff_key, array_diff_assoc, array_udiff_assoc Funktion

Kurze Diskussion zum PHP-Quellcode 16: Informationen zur Funktion array_count_values ​​​​

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum PHP-Quellcode 19: Über array_file, Bereichsfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn