首頁 後端開發 php教程 淺談PHP源碼十九:關於array_file,range函數

淺談PHP源碼十九:關於array_file,range函數

Jun 28, 2018 pm 05:41 PM
range函數

這篇文章主要介紹了關於淺談PHP源碼十九:關於array_file,range函數,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

淺談PHP原始碼十九:關於array_file,range函數

array_fill
(PHP 4 >= 4.2.0, PHP 5)

array_fill — 以給定的值填入陣列
說明
array array_fill ( int start_index, int num, mixed 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的Hash Table中

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

# range — 建立一個包含指定範圍單元的陣列
說明
array range ( mixed low, mixed high [, number step] )

range() 傳回數組中從low 到high 的單元,包括它們本身。如果 low > high,則序列將從 high 到 low。

新參數: 可選的 step 參數是 PHP 5.0.0 新加的。

如果給了 step 的值,它將被當作單元之間的步進值。 step 應該為正值。如果未指定,step 則預設為 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);}
登入後複製

對於浮點型和整形的處理基本上類似,只有寫入Hash Table的方法不同

浮點型用的是add_next_index_double
整形用的是add_next_index_long

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

淺談PHP源碼十八:關於array_diff_key,array_diff_assoc,array_udiff_assoc 函數

淺談PHP原始碼十六:關於array_count_values函數

以上是淺談PHP源碼十九:關於array_file,range函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1253
29
C# 教程
1227
24
Python中range函數的基本用法 Python中range函數的基本用法 Jan 26, 2024 pm 03:17 PM

Python中range()是一個內建函數,用於產生一個整數序列,其基本語法為“range(start, stop[, step])”,其中,start表示序列的起始值(可以省略,預設為0 ),stop表示序列的結束值(必須指定),step表示序列中相鄰兩個數之間的步長(可以省略,預設為1)。

Python函數介紹:range函數的介紹及範例 Python函數介紹:range函數的介紹及範例 Nov 04, 2023 am 10:10 AM

Python函數介紹:range函數的介紹及範例Python是一種廣泛應用於各種領域的高階程式語言,它具有簡單易學的特點,並且有著豐富的內建函數庫。其中,range函數是Python中常用的一個內建函數之一。本文將詳細介紹range函數的功能以及使用方法,並透過實例來示範其具體的應用。 range函數是用來產生一個整數序列的函數,它接受三個參數,分別是起始值(

PHP原始碼運行問題:index報錯解決方法 PHP原始碼運行問題:index報錯解決方法 Mar 09, 2024 pm 09:24 PM

PHP原始碼運行問題:index報錯解決方法,需要具體程式碼範例PHP是一種廣泛使用的伺服器端腳本語言,經常被用於開發動態網站和Web應用程式。然而,有時候在運行PHP原始碼時會遇到各種問題,其中「index報錯」是比較常見的情況。本文將介紹一些常見的index報錯原因以及解決方法,並提供具體的程式碼範例,幫助讀者更好地處理這類問題。問題描述:在執行PHP程式時

php原始碼是什麼 php原始碼是什麼 Oct 11, 2019 am 09:35 AM

PHP原始碼指的是PHP原始碼,原始碼是程式和網站的基礎,而PHP即“超文本預處理器”,是一種通用開源腳本語言。

使用Python的range()函數產生指定範圍的數字序列 使用Python的range()函數產生指定範圍的數字序列 Aug 22, 2023 pm 05:03 PM

使用Python的range()函數產生指定範圍的數字序列在Python程式設計中,很常見的一個需求是產生一系列數字序列。這些數字可以用於迭代、循環、索引等各種操作。為了滿足這個需求,Python提供了一個非常方便的內建函數range()。 range()函數的語法如下:range(start,stop,step)其中,start表示起始值(可選,預設為0),

Python函數介紹:range函數的功能和使用範例 Python函數介紹:range函數的功能和使用範例 Nov 03, 2023 pm 06:11 PM

Python函數介紹:range函數的功能與使用範例Python是一種優美、易讀、易寫的物件導向程式語言,擁有豐富且強大的函數函式庫。其中,range()函數是Python內建函數之一,常用於產生一系列數字,常用形式為:range(start,stop[,step])。 range函數的功能:range()函數可以用來產生一個整數序列,一般形式為range(

Python 2.x 中如何使用range()函數產生整數序列 Python 2.x 中如何使用range()函數產生整數序列 Jul 30, 2023 pm 02:41 PM

Python是一門功能強大的程式語言,它提供了許多便捷的工具和函數來幫助我們更有效率地編寫程式碼。其中一個常用的函數是range()函數,它用來產生一個整數序列,非常方便我們進行循環迭代或產生列表。本文將重點放在如何在Python2.x中使用range()函數來產生整數序列,並給出一些程式碼範例。 range()函數在Python2.x中

在PHP中的range()函數 在PHP中的range()函數 Aug 25, 2023 pm 12:01 PM

range()函數建立一個包含一系列元素的陣列。它會傳回從開始到結束的元素。語法range(start,end,step)參數start-第一個值end-最後一個值step-範圍中的增量回傳值range()函數傳回從start到end的元素。範例以下是一個範例- LiveDemo<?php$number=range(0,12,3);print_r($number);?>輸出以下是輸出-Array([0]=>0[1]=>3[ 2]=>6[3]=>9

See all articles