/ ** Copyright belongs to PHPSALON.COM, unauthorized, it is strictly forbidden to reprint ** Author: wenlong wu * /
Some time ago, a netizen asked me how to traverse an array when writing PHP extensions, and discussed the code and made a corresponding explanation.
PHP_FUNCTION (Print_Array)
{
ZVAL * Z_Array; // External incoming array
Int count, i;
ZVAL ** Z_ITEM;
IF (Failure == Zend_Parse_Parameters (argc tsrmls_cc, "a", & z_Array) {
Return;
}
/ / Get an array size
Count = zend_hash_num_erements (z_arrval_p (z_ARRAY));
// Point the internal pointer of the array to the first unit
ZEND_HASH_INTERNAL_POINTER_RESET (Z_ARRVAL_P (Z_ARRAY));
For (i = 0; i Char * key; Int idx; / / Get current data ZEND_HASH_GET_CURRENT_DATA (z_ARRVAL_P (Z_Array), (void **) & z_Item); Convert_to_string_ex (z_item); IF (ZEND_HASH_GET_CURRENT_KEY (Z_ARRVAL_P (Z_ARRAY), & Key, & IDX, 0) == Hash_Key_IS_STRING) { // Key is a string PHP_PRINTF ("Array [% s] =% s", key, z_strval_pp (z_item)); } else { // key is a number PHP_PRINTF ("Array [% D] =% S", IDX, Z_STRVAL_PP (Z_Item)); } // Move the internal pointer in the array to one ZEND_HASH_MOVE_FORWARD (Z_ARRVAL_P (Z_Array); } } The PHP call is as follows: $ arr = array ( 'id' => 'ezdevelop', 1 => "Test Number", 2 => "Test Number 2", 'name' => 'wenlong wu' ); Print_Array ($ ARR); ?>