<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 8.3 使用HashTable與{數組} # 8.3 使用HashTable與{數組} 當你在擴展中使用HashTable時候,95%是要存儲用戶端的變量,就像PHP語言中數組那樣。為此,內核中已經準備好了相應的工具,來讓我們更加的方便的操作HashTable存儲zval\*,也就是PHP語言中的數組,即IS\_ARRAY常量代表的zval,以下用{數組}來代替PHP語言中的數組這個詞。 ### 創建{數組} 創建HashTable有些繁瑣,雖然有輔助的宏但還是不能一步完成,而創建{數組}便簡單多了,直接使用array\_init(zval *arrval)函數即可,注意它的參數是zval*類型的! 這樣,我們像用戶端返回數組便簡單多了: ``` ZEND_FUNCTION(sample_array) { array_init(return_value); } //return_value是zval*類型的,所以我們直接對它調用array_init()函數即可,即把它初始化成了一個空數組。 ``` ### 增! 將{數組}初始化后,接下來就要向其添加元素了。因為PHP語言中有多種類型的變量,所以也對應的有多種類型的add*assoc**()、add*index**、add*next\_index*\*()函數。如: ``` array_init(arrval); add_assoc_long(zval *arrval, char *key, long lval); add_index_long(zval *arrval, ulong idx, long lval); add_next_index_long(zval *arrval, long lval); ``` 這三個函數的第一個參數都要被操作的{數組}指針,然后是索引值,最后是變量,唯一不同的是add\_next\_index\_long()函數的索引值是其自己計算出來的。根據上一節的內容我們可以知道,這三個函數分別在內部使用了zend\_hash\_update()、zend\_hash\_index\_update()與zend\_hash\_next\_index\_insert函數。 ``` //add_assoc_*系列函數: add_assoc_null(zval *aval, char *key); add_assoc_bool(zval *aval, char *key, zend_bool bval); add_assoc_long(zval *aval, char *key, long lval); add_assoc_double(zval *aval, char *key, double dval); add_assoc_string(zval *aval, char *key, char *strval, int dup); add_assoc_stringl(zval *aval, char *key,char *strval, uint strlen, int dup); add_assoc_zval(zval *aval, char *key, zval *value); //備注:其實這些函數都是宏,都是對add_assoc_*_ex函數的封裝。 //add_index_*系列函數: ZEND_API int add_index_long (zval *arg, ulong idx, long n); ZEND_API int add_index_null (zval *arg, ulong idx ); ZEND_API int add_index_bool (zval *arg, ulong idx, int b ); ZEND_API int add_index_resource (zval *arg, ulong idx, int r ); ZEND_API int add_index_double (zval *arg, ulong idx, double d); ZEND_API int add_index_string (zval *arg, ulong idx, const char *str, int duplicate); ZEND_API int add_index_stringl (zval *arg, ulong idx, const char *str, uint length, int duplicate); ZEND_API int add_index_zval (zval *arg, ulong index, zval *value); //add_next_index_long函數: ZEND_API int add_next_index_long (zval *arg, long n ); ZEND_API int add_next_index_null (zval *arg ); ZEND_API int add_next_index_bool (zval *arg, int b ); ZEND_API int add_next_index_resource (zval *arg, int r ); ZEND_API int add_next_index_double (zval *arg, double d); ZEND_API int add_next_index_string (zval *arg, const char *str, int duplicate); ZEND_API int add_next_index_stringl (zval *arg, const char *str, uint length, int duplicate); ZEND_API int add_next_index_zval (zval *arg, zval *value); ``` 每組函數最后的一個,即zend...\_zval()函數,允許我們向這個{數組}中添加資源、對象、{數組}等復合類型的PHP變量。下面讓我們通過一個例子來演示下它們的用法: ``` ZEND_FUNCTION(sample_array) { zval *subarray; array_init(return_value); /* Add some scalars */ add_assoc_long(return_value, "life", 42); add_index_bool(return_value, 123, 1); add_next_index_double(return_value, 3.1415926535); /* Toss in a static string, dup'd by PHP */ add_next_index_string(return_value, "Foo", 1); /* Now a manually dup'd string */ add_next_index_string(return_value, estrdup("Bar"), 0); /* Create a subarray */ MAKE_STD_ZVAL(subarray); array_init(subarray); /* Populate it with some numbers */ add_next_index_long(subarray, 1); add_next_index_long(subarray, 20); add_next_index_long(subarray, 300); /* Place the subarray in the parent */ add_index_zval(return_value, 444, subarray); } ``` 這時如果我們用戶端var\_dump這個函數的返回值便會得到: ``` <?php var_dump(sample_array()); ``` 輸出: ``` array(6) { ["life"]=> int(42) [123]=> bool(true) [124]=> float(3.1415926535) [125]=> string(3) "Foo" [126]=> string(3) "Bar" [444]=> array(3) { [0]=> int(1) [1]=> int(20) [2]=> int(300) } } ``` ## links - 8.2 [操作HashTable的API](8.2.html) - 8.4 [第8章小結](8.4.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看