php計數函數count,php 函數

本文目錄一覽:

php中count()函數的作用?

PHP中count() 函數表示:計算數組中元素的個數,或者計算對象中屬性的個數;

計算數組元素個數示例:

?php

$arr = array(“baidu”, “google”, “soso”);

echo count($arr);

//結果:3

?

計算對象中的屬性個數示例:

?php

class Person{

    public $name;

    public $age;

    

    public  function __construct(){

        $this-name    = ‘baiduzhidao’;

        $this-age = ’10’;

    }

    function msg(){

        echo “msg function.”;

    }

}

//new 對象

$per= new Person();

//獲取對象屬性關聯數組

$var=get_object_vars($per);

//計算對象屬性個數

echo count($var);

//輸出結果為:2

?

php中統計數組的長度是那個函數?

您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!展開全部

獲取一維數組:

count()和sizeof() 都可以直接統計一維數組長度。示例如下:

$arr = Array(‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’); echo count($arr); // 輸出10

$arr = array(‘蘋果’,’香蕉’,’桔子’,’西瓜’,’梨’,’葡萄’); echo sizeof($arr); // 輸出6

獲取二維數組長度:

count()函數有兩個參數:

count($arr,COUNT_NORMAL); //默認,不檢測多維數組

count($arr,COUNT_RECURSIVE); //檢測多維數組

例子:

$arr = array(

0=array(‘name’=’kong’,’age’=’18’),

1=array(‘name’=’liang’,’age’=’30’)

);

count($arr) = 2;

count($arr,COUNT_RECURSIVE) = 6;非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!

php count函數使用問題

如果你單純是要計算查詢出的行數

用$num

=

mysql_num_rows($R1);就可以了

如果是別的,加我BAIDU

HI吧,一起討論一下

其實你print_r($select);你就會發現你的數組是6個數據,因為mysql_fetch_array()的語法是這樣的

array

mysql_fetch_array

(

resource

result

[,

int

result_type]

)

也就是說第二個參數可以取三個值MYSQL_NUM,MYSQL_ASSOC,MYSQL_BOTH(默認)

他們的意思分別是鍵名取數字,鍵名取字段名,全部

所以,你數據庫選擇了3個列,那$select等於就取了6個數據

(如:

[0]=1

[id]=1

[1]=2

[name]=2

[2]=3

[password]=3)

存入數組,如果是$select

=

mysql_fetch_array($R1,MYSQL_ASSOC),那麼count($select)就是3

(如:

[id]=1

[name]=2

[password]=3)

MYSQL_NUM同理

至於你說為什麼只計算出6,因為取數據值需要循環,即

while($row

=

mysql_fetch_array($R1,MYSQL_ASSOC))

{

$num

+=

count($row);

}

echo

$num;

$num應該就是你想要的結果

php中計算二維數組中某一元素之和的函數是那個啊?謝謝……

PHP數組的總結(很全面啊)

一、什麼是數組

數組就是一組數據的集合,把一系列數據組織起來,形成一個可操作的整體。數組的每個實體都包含兩項:鍵和值。

二、聲明數據

在PHP中聲明數組的方式主要有兩種:一是應用array()函數聲明數組,一是直接為數組元素賦值。

1array()函數聲明的數

一、什麼是數組

數組就是一組數據的集合,把一系列數據組織起來,形成一個可操作的整體。數組的每個實體都包含兩項:鍵和值。

二、聲明數據

在PHP中聲明數組的方式主要有兩種:一是應用array()函數聲明數組,一是直接為數組元素賦值。

1array()函數聲明的數組的方式array([mixed…])

參數mixed的語法為key=value

如,?php

$array=array(“1″=”編”,”2″=”程”,”3″=”詞”,”4″=”典”);

print_r($array);

echo

“br”;

echo

$array[1];

//注意:下標默認是從0開始

echo

$array[2];

echo

$array[3];

echo

$array[4];

?

2直接為數組元素賦值。如果在創建數組時不知所創建數組的大小,或在實際編寫程序時數組的大小可能發生變化,採用這種數組創建的方法較好。

如,?php

$array[1]=”I”;

$array[2]=”love”;

$array[3]=”PHP”;

print_r($array);

//輸出所創建數組的結構

?

三、數組的類型

PHP支持兩種數組:索引數組(indexed

array)和聯合數組(associative

array),前者使用數字作為鍵,後者使用字符串作為鍵。

四、輸出數組

在PHP中對數組元素輸出,可以通過echo和print語句來實現,但這隻能對數組中某一元素進行輸出;要將數組結構輸出則要使用print_r()函數,其語法:print_r(mixed

expression),參數expression為普通的整形、字符型或實型變量則輸出該變量本身,如果該參數為數組,則按一定鍵值和元素的順序顯示出該數組中的所有元素。

五、數組的構造

一維數組:

當一個數組的元素是變量時,則稱其為一維數組。

聲明一位數組:

類型說明符

數組名[常量表達式];

二維數組:

當一個數組的元素是一個一位數組時,則稱之為二維數組。

如,?php

$str

=

array

(

“網絡編程語言”=array

(“PHP”,”JSP”,”ASP”),

“體育項目”=array

(“m”=”足球”,”n”=”籃球”));

print_r

(

$str)

;

?

六、遍曆數組

遍曆數組中的所有元素是常用的一種操作,在遍歷的過程中可以完成查詢或其他功能。在PHP中遍曆數組的方法有多種,下面介紹最常用的兩種方法。

1使用foreach結構遍曆數組;

2使用list()函數遍曆數組,list()函數僅能用於數字索引的數組,且數字索引從0開始。

例:綜合使用list()和each()認證用戶登錄:

?php

//輸出用戶登錄信息

while(list($name,$value)=each($_POST)){

if($name!=”submit”){

echo

“$name=$valuebr”;

}

}

?

七、統計數組元素個數

在PHP中,使用count()函數對數組中的元素個數進行統計,語法為:int

coun(mixed

array[,int

mode]),其中參數array為必要參數,mode為可選參數,若選中COUNT——RECURSIVE(或1),本函數將遞歸地對數組數組。如,

?php

$array

=

array(“php”

=

array(“PHP函數參考大全”,”PHP程序開發範例寶典”,”PHP數據庫系統開發完全手冊”),

“asp”

=

array(“ASP經驗技巧寶典”)

);

//聲明一個二維數組

echo

count($array,COUNT_RECURSIVE);//遞歸統計數組元素的個數,運行結果為6

?

八、數組排序

1使用sort()和rsort()分別對數組進行升序和降序,如,

?php

$array=array(5,26,37,18,9,42,88,66);

$array1=sort($array);

for($i=0;$icount($array);$i++){

echo

$array[$i].” “;

}

echo

“br”;

$array1=rsort($array);

for($i=0;$icount($array);$i++){

echo

$array[$i].” nbsp”;

}

?

運行結果:

5

9

18

26

37

42

66

88

88

66

42

37

26

18

9

5

2使用ksort()和asort()對關聯數組排序

如果使用了相關數組,在排序後還要保持關鍵字和值的排序一致,這是就需要使用ksort()和asort()函

數,如,

?php

$array=array(‘php’=1,’jsp’=2,’asp’=3);

ksort($array);

print_r($array);

echo

“br”;

asort($array);

print_r($array);

?

運行結果:

Array

(

[asp]

=

3

[jsp]

=

2

[php]

=

1

)

Array

(

[php]

=

1

[jsp]

=

2

[asp]

=

3

)

PHP的count(數組)和strlen(字符串)的內部實現。

翻了下PHP內核的定義,大概心中也有了答案了

count()和strlen()都是O(1)的時間複雜度

試想一下如果strlen()需要O(N)的複雜度那未免也太慢了,字符串長度起來的話服務器不是要直接掛掉嗎

這兩個函數都是典型的空間換時間的做法

我們可以先看看zvalue的結構:

typedef union _zvalue_value {

   long lval;             /* long value */

   double dval;            /* double value */

   struct {

      char *val;

      int len;

   } str;

   HashTable *ht;          /* hash table value */

   zend_object_value obj;

   zend_ast *ast;

} zvalue_value;

這裡用的是一個聯合體,當變量類型是string類型的時候附加存儲多了一個len的整型變量,顯而易見需要取長度直接利用記錄值就可以了,自然就是O(1)

對於count()常用的參數類型應該為數組,對於繼承Countable的類暫不作討論

數組實現方式為Hashtable,直接看看他的結構吧

typedef struct _hashtable { 

    uint nTableSize;        // hash Bucket的大小,最小為8,以2x增長。

    uint nTableMask;        // nTableSize-1 , 索引取值的優化

    uint nNumOfElements;    // hash Bucket中當前存在的元素個數,count()函數會直接返回此值 

    ulong nNextFreeElement; // 下一個數字索引的位置

    Bucket *pInternalPointer;   // 當前遍歷的指針(foreach比for快的原因之一)

    Bucket *pListHead;          // 存儲數組頭元素指針

    Bucket *pListTail;          // 存儲數組尾元素指針

    Bucket **arBuckets;         // 存儲hash數組

    dtor_func_t pDestructor;    // 在刪除元素時執行的回調函數,用於資源的釋放

    zend_bool persistent;       //指出了Bucket內存分配的方式。如果persisient為TRUE,則使用操作系統本身的內存分配函數為Bucket分配內存,否則使用PHP的內存分配函數。

    unsigned char nApplyCount; // 標記當前hash Bucket被遞歸訪問的次數(防止多次遞歸)

    zend_bool bApplyProtection;// 標記當前hash桶允許不允許多次訪問,不允許時,最多只能遞歸3次

#if ZEND_DEBUG

    int inconsistent;

#endif

} HashTable;

count直接獲取nNumOfElements大小,所以也是O(1)

補充————————————————

count() 函數的定義在這裡

/* {{{ proto int count(mixed var [, int mode])

   Count the number of elements in a variable (usually an array) */

PHP_FUNCTION(count)

{

    zval *array;

    zend_long mode = COUNT_NORMAL;

    zend_long cnt;

    zval *element;

    ZEND_PARSE_PARAMETERS_START(1, 2)

        Z_PARAM_ZVAL(array)

        Z_PARAM_OPTIONAL

        Z_PARAM_LONG(mode)

    ZEND_PARSE_PARAMETERS_END();

    switch (Z_TYPE_P(array)) {

        case IS_NULL:

            php_error_docref(NULL, E_WARNING, “Parameter must be an array or an object that implements Countable”);

            RETURN_LONG(0);

            break;

        case IS_ARRAY:

            if (mode != COUNT_RECURSIVE) {

                //類型為數組時調用zend內核函數 zend_array_count()

                cnt = zend_array_count(Z_ARRVAL_P(array));

            } else {

                cnt = php_count_recursive(Z_ARRVAL_P(array));

            }

            RETURN_LONG(cnt);

            break;

        case IS_OBJECT: {

            zval retval;

            /* first, we check if the handler is defined */

            if (Z_OBJ_HT_P(array)-count_elements) {

                RETVAL_LONG(1);

                if (SUCCESS == Z_OBJ_HT(*array)-count_elements(array, Z_LVAL_P(return_value))) {

                    return;

                }

            }

            /* if not and the object implements Countable we call its count() method */

            if (instanceof_function(Z_OBJCE_P(array), zend_ce_countable)) {

                zend_call_method_with_0_params(array, NULL, NULL, “count”, retval);

                if (Z_TYPE(retval) != IS_UNDEF) {

                    RETVAL_LONG(zval_get_long(retval));

                    zval_ptr_dtor(retval);

                }

                return;

            }

            /* If There’s no handler and it doesn’t implement Countable then add a warning */

            php_error_docref(NULL, E_WARNING, “Parameter must be an array or an object that implements Countable”);

            RETURN_LONG(1);

            break;

        }

        default:

            php_error_docref(NULL, E_WARNING, “Parameter must be an array or an object that implements Countable”);

            RETURN_LONG(1);

            break;

    }

}

如果沒有特別指定mode參數為 COUNT_RECURSIVE 的話(即作遍歷),跳轉到 zend 的數組計數函數 zend_array_count()

#define zend_hash_num_elements(ht) \

    (ht)-nNumOfElements

static uint32_t zend_array_recalc_elements(HashTable *ht)

{

    zval *val;

    uint32_t num = ht-nNumOfElements;

    

           ZEND_HASH_FOREACH_VAL(ht, val) {

               if (Z_TYPE_P(val) == IS_INDIRECT) {

                   if (UNEXPECTED(Z_TYPE_P(Z_INDIRECT_P(val)) == IS_UNDEF)) {

                       num–;

                   }

               }

    } ZEND_HASH_FOREACH_END();

    return num;

}

ZEND_API uint32_t zend_array_count(HashTable *ht)

{

    uint32_t num;

    if (UNEXPECTED(ht-u.v.flags  HASH_FLAG_HAS_EMPTY_IND)) {

        num = zend_array_recalc_elements(ht);

        if (UNEXPECTED(ht-nNumOfElements == num)) {

            ht-u.v.flags = ~HASH_FLAG_HAS_EMPTY_IND;

        }

    } else if (UNEXPECTED(ht == EG(symbol_table))) {

        num = zend_array_recalc_elements(ht);

    } else {

        num = zend_hash_num_elements(ht);

    }

    return num;

}

IS_REFERENCE:間接 zval 指的就是其真正的值是存儲在其他地方的。注意這個 IS_REFERENCE 類型是不同的,間接 zval 是直接指向另外一個 zval 而不是像 zend_reference 結構體一樣嵌入 zval。

只有當數組中有 HASH_FLAG_HAS_EMPTY_IND 這個 flag 時(間接zval)才會對數組進行遍歷校驗,其他情況下都是直接取 數組(hash table) 裏面的 nNumOfElements 的值,答案顯而易見了,就是O(1)

php如何計算數組的單元個數

//count函數有兩個參數:

//0(或COUNT_NORMAL)為默認,不檢測多維數組(數組中的數組);

//1(或COUNT_RECURSIVE)為檢測多維數組,

$arr=array(

0=array(‘title’ = ‘新聞1’, ‘viewnum’ = 123, ‘content’ = ‘內容1’),

1=array(‘title’ = ‘新聞2’, ‘viewnum’ = 99, ‘content’ = ‘內容2’)

);

echo ‘不統計多維數組:’.count($arr,0); echo ‘或用sizeof為’.sizeof($arr,0);

echo “br/”;

echo ‘統計多維數組:’.count($arr,1);echo ‘或用sizeof為’.sizeof($arr,1);

原創文章,作者:YVEF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/133516.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YVEF的頭像YVEF
上一篇 2024-10-03 23:59
下一篇 2024-10-03 23:59

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29

發表回復

登錄後才能評論