Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion zum PHP-Quellcode 10: Über die Funktionen array_keys und array_values

Eine kurze Diskussion zum PHP-Quellcode 10: Über die Funktionen array_keys und array_values

不言
不言Original
2018-06-28 17:03:012179Durchsuche

Dieser Artikel stellt hauptsächlich den PHP-Quellcode 10 vor: In Bezug auf die Funktionen array_keys und array_values ​​​​hat er einen bestimmten Referenzwert. Jetzt können Freunde in Not darauf verweisen Erster des neuen Jahres In diesem Artikel möchte ich zunächst allen meinen Freunden ein frohes neues Jahr wünschen

Ich hatte heute etwas Zeit, den Code zu lesen und etwas als Erinnerung zu schreiben!

array array_keys (array input [, Mixed search_value [, bool strict]] )

array_keys() gibt den Schlüsselnamen der Zahl oder Zeichenfolge im Eingabearray zurück.

Wenn der optionale Parameter search_value angegeben ist, wird nur der Schlüsselname des Werts zurückgegeben. Andernfalls werden alle Schlüssel im Eingabearray zurückgegeben. Seit PHP 5 können Sie den Parameter strict verwenden, um einen Gleichheitsvergleich durchzuführen (===).

Die Funktion array_keys ist in Zeile 2416 der Datei standard/array.c PHP_FUNCTION(array_keys) implementiert

Das Programm folgt dem üblichen PHP-Stil und ermittelt zunächst, ob die Eingabe korrekt ist ist ein dritter Parameter. Dann verwendet die Funktion, die die Größe bestimmt, is_identical_function (standardmäßig wird die Funktion is_equal_function verwendet).

Initialisiert dann das zurückgegebene Array, durchläuft das angegebene Array, nimmt den Schlüsselwert jedes Elements und weist ihn dem zu zurückgegebenes Array. Dieser Schlüsselwert ist in zwei Arten von Zahlen und Zeichenfolgen unterteilt. Die wichtigste Funktion ist die Hash-Operationsfunktion zend_hash_get_current_key_ex (erhält den Schlüsselwert des aktuellen Elements)

  ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos){
    Bucket *p; 
    p = pos ? (*pos) : ht->pInternalPointer; 
    IS_CONSISTENT(ht);     if (p) {
        if (p->nKeyLength) {    //    数字型的nKeyLength长度为0
            if (duplicate) {
                *str_index = estrndup(p->arKey, p->nKeyLength - 1);
            } else {
                *str_index = p->arKey;    //    /* arKey存储key名称(字符串类型的key)必须是最后一个成员,*/
            }
            if (str_length) {
                *str_length = p->nKeyLength;
            }
            return HASH_KEY_IS_STRING;
        } else {
            *num_index = p->h;    //    存储数字key值
            return HASH_KEY_IS_LONG;
        }
    }
    return HASH_KEY_NON_EXISTANT;}

Das Verständnis dieser Funktion Hängt hauptsächlich vom Verständnis der Bucket-Definition ab

Für Bucket-bezogene Inhalte gehen Sie bitte zu http://www.php.cn/php-weizijiaocheng-405316.html

array array_values ​​​​(Array-Eingabe)

array_values() gibt das Eingabearray mit allen Werten zurück und erstellt numerische Indizes für sie.

Die Funktion „array_values“ ähnelt im Wesentlichen der Implementierung der Funktion „array_keys“, es fehlen jedoch auch eine Operation „zend_hash_get_current_key_ex“ und eine Operation zur Bestimmung des Werttyps.


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

Verwandte Empfehlungen:

Eine kurze Diskussion des neunten PHP-Quellcodes: Einführung in array_unshift, array_push


Eine kurze Diskussion von PHP-Quellcode 8: Einführung in array_pop, array_shift


Eine kurze Diskussion von PHP-Quellcode 7: Über nl2br, ltrim, rtrim, trim-Funktionen

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum PHP-Quellcode 10: Über die Funktionen array_keys und array_values. 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