Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion des PHP-Quellcodes 22: Über die Funktion array_splice

Eine kurze Diskussion des PHP-Quellcodes 22: Über die Funktion array_splice

不言
不言Original
2018-06-28 17:50:592197Durchsuche

In diesem Artikel geht es hauptsächlich um eine kurze Diskussion über den PHP-Quellcode 22: In Bezug auf die Funktion array_splice hat sie einen bestimmten Referenzwert. Jetzt kann ich sie mit allen teilen, die sie brauchen.

A Kurze Diskussion zum PHP-Quellcode Zweiundzwanzig: Über die Funktion array_splice
array_splice
(PHP 4, PHP 5)

array_splice – einen Teil des Arrays entfernen und durch andere Werte ersetzen
Erläuterung
array array_splice (array &input, int offset [, int length [, array replacement]] )

array_splice() entfernt die durch Offset und Länge angegebenen Zellen im Eingabearray, wenn der Ersetzungsparameter lautet Vorausgesetzt, die Zellen im Ersatzarray werden ersetzt. Gibt ein Array zurück, das die entfernten Zellen enthält. Beachten Sie, dass numerische Tastennamen in der Eingabe nicht beibehalten werden.

Wenn der Offset positiv ist, beginnt die Entfernung an dem Offset, der durch diesen Wert im Eingabearray angegeben wird. Wenn der Offset negativ ist, beginnt die Entfernung an dem durch diesen Wert angegebenen Offset vom Ende der Eingabe.

Wenn die Länge weggelassen wird, werden alle Teile des Arrays vom Offset bis zum Ende entfernt. Wenn die Länge angegeben ist und positiv ist, werden diese vielen Zellen entfernt. Wenn die Länge angegeben wird und negativ ist, werden alle Elemente vom Offset bis zur Länge, gezählt vom Ende des Arrays, entfernt. Tipp: Um bei der Ersetzung alle Elemente vom Offset bis zum Ende des Arrays zu entfernen, verwenden Sie count($input) als Länge.

Wenn ein Ersatzarray angegeben wird, werden die entfernten Zellen durch Zellen in diesem Array ersetzt. Wenn die Kombination aus Offset und Länge dazu führt, dass kein Wert entfernt wird, wird das Element im Ersatzarray an der durch Offset angegebenen Position eingefügt. Beachten Sie, dass die Schlüsselnamen im Ersatzarray nicht beibehalten werden. Wenn der zum Ersetzen verwendete Wert nur eine Einheit ist, muss array() nicht hinzugefügt werden, es sei denn, die Einheit selbst ist ein Array

Die Funktion array_splice ruft die Funktion php_splice auf. Die Hauptcodebeschreibung von Diese Funktion ist wie folgt:

 /* 创建并初始化返回数组,此返回数组为php_splice的返回数组,并非array_splice的返回数组(array_splice的返回数组为removed)*/ALLOC_HASHTABLE(out_hash);    zend_hash_init(out_hash, 0, NULL, ZVAL_PTR_DTOR, 0);/*将数组中从开始到offset的元素拷贝到返回数组中 */for (pos=0, p=in_hash->pListHead; pos<offset && p ; pos++, p=p->pListNext) { 
    entry = *((zval **)p->pData);
    entry->refcount++;/*更新返回数组 */if (p->nKeyLength)
    zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);else
    zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);}/* 将需要移除的元素赋值给removed,即array_splice的返回数组 */if (removed != NULL) {
    for ( ; pos<offset+length && p; pos++, p=p->pListNext) {
    entry = *((zval **)p->pData);
    entry->refcount++;
    if (p->nKeyLength)
        zend_hash_quick_update(*removed, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
    else
        zend_hash_next_index_insert(*removed, &entry, sizeof(zval *), NULL);
    }} else /* 其它情况,跳过这些元素 */
    for ( ; pos<offset+length && p; pos++, p=p->pListNext);/* 如果有元素需要插入,即有replacement参数 */if (list != NULL) {/* 对于每个元素,创建新的zval,拷贝并将它写入到返回数组中*/
    for (i=0; i<list_count; i++) {
        entry = *list[i];
        entry->refcount++;
        zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
    }}/* 拷贝剩下的元素 */for ( ; p ; p=p->pListNext) {
    entry = *((zval **)p->pData);
    entry->refcount++;
    if (p->nKeyLength)
        zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
    else
        zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);} /* 重置数组的游标,相当于reset函数*/zend_hash_internal_pointer_reset(out_hash);

Der gesamte Prozess:
1. Elemente vom Start bis zum Offset in das Rückgabearray kopieren
2 Elemente vom Offset bis zum Offset+Länge entfernen
3. Wenn ersetzte Elemente vorhanden sind, fügen Sie das neue Element an der Position nach Offset ein
4. Fügen Sie die Funktion nach Offset+Länge in das zurückgegebene Array ein
5. Setzen Sie den Array-Cursor zurück

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

Verwandte Empfehlungen:

Eine kurze Diskussion des PHP-Quellcodes einundzwanzig: Über die Funktion array_slice

Eine kurze Beschreibung Diskussion des PHP-Quellcodes einundzwanzig: Über array_flip, array_reverse-Funktion

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion des PHP-Quellcodes 22: Über die Funktion array_splice. 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