How to traverse an array in PHP extension? (Zend API)

xiaoxiao2021-03-06  40

/ ** 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);

?>

转载请注明原文地址:https://www.9cbs.com/read-70571.html

New Post(0)