首頁 > 後端開發 > php教程 > 整理的一篇zend中的陣列操作

整理的一篇zend中的陣列操作

WBOY
發布: 2016-07-29 08:58:11
原創
1167 人瀏覽過
數組的值儲存在zvalue_value.ht欄位,ht是HashTable的資料
在Zend/zend_vm_execute.h檔案
static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_CONSTHANER(ZEND  zend_op *opline = EX(opline);
        array_init( &EX_T(opline->result.u.var).tmp_var); //分配陣列記憶體空間,初始化
        if (IS_CV == IS_UNUSED) {
        CV0if
        } else {
                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
#endif API int _array_init(zval *arg, uint size ZEND_FILE_LINE_DC) /* {{{ */
{
        ALLOC_HASHTABLE_REL(Z_ARRVAL_P(arg) ); //分配記憶體
        _zend_hash_init(Z_ARRVAL_P(arg), size, NULL, ZVAL_PTR_DTOR, 0 ZEND_FILE_LINE_RELAY_CC);
    3(m );    return SUCCESS;
}
看到沒有,Hash表初始化函數_zend_hash_init
在PHP擴充功能中我們可以這樣寫:
PHP_FUNCTION(test)
{
        zval *value;
       KE_STD_Z m._STDh value);        ZEND_SET_SYMBOL(EG(active_symbol_table),"star", value);
加入一個元素的關鍵程式碼
add_assoc_long(zval *array, char *key, long n);    新增一個長整型元素。
add_assoc_unset(zval *array, char *key);             新增一個 unset 元素。
add_assoc_bool(zval *array, char *key, int b);       加一個布林值。
add_assoc_resource(zval *array, char *key, int r); 新增一個資源。
add_assoc_double(zval *array, char *key, double d); 新增一個浮點值。
add_assoc_string(zval *array, char *key, char *str, int duplicate); 新增一個字串。 duplicate 用來表示這個字串是否要複製到 Zend 的內部記憶體。
add_assoc_stringl(zval *array, char *key, char *str, uint length, int duplicate); 新增一個指定長度的字串。
add_assoc_zval(zval *array, char *key, zval *value); 增加一個 zval 結構。 
add_index_long(zval *array, uint idx, long n); 增加一個長整型元素。
add_index_unset(zval *array, uint idx); 增加一個 unset 元素。
add_index_bool(zval *array, uint idx, int b); 加一個布林值。
add_index_resource(zval *array, uint idx, int r); 新增一個資源。
add_index_double(zval *array, uint idx, double d); 增加一個浮點值。
add_index_string(zval *array, uint idx, char *str, int duplicate); 
加一個字串。 duplicate 用來表示這個字串是否要複製到 Zend 的內部記憶體。
add_index_stringl(zval *array, uint idx, char *str, uint length, int duplicate); 新增一個指定長度的字串。
add_index_zval(zval *array, uint idx, zval *value); 增加一個 zval 結構。 
add_next_index_long(zval *array, long n); 增加一個長整數元素。
add_next_index_unset(zval *array); 新增一個 unset 元素。
add_next_index_bool(zval *array, int b); 新增一個布林值。
add_next_index_resource(zval *array, int r); 新增一個資源。
add_next_index_double(zval *array, double d); 新增一個浮點值。
add_next_index_string(zval *array, char *str, int duplicate); 新增一個字串。 duplicate 用來表示這個字串是否要複製到 Zend 的內部記憶體。
add_next_index_stringl(zval *array, char *str, uint length, int duplicate); 新增一個指定長度的字串。
add_next_index_zval(zval *array, zval *value); 增加一個 zval 結構。 新增另外一個數組、物件或流等資料。



以上就介紹了整理的一篇zend中的陣列操作,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板