diff --git a/docs/extensions.md b/docs/extensions.md index 595b0424d..30f434eb5 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -212,6 +212,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - `frankenphp.GoAssociativeArray(arr unsafe.Pointer, ordered bool) frankenphp.AssociativeArray` - Convert a PHP array to an ordered Go `AssociativeArray` (map with order) - `frankenphp.GoMap(arr unsafe.Pointer) map[string]any` - Convert a PHP array to an unordered Go map - `frankenphp.GoPackedArray(arr unsafe.Pointer) []any` - Convert a PHP array to a Go slice +- `frankenphp.IsPacked(zval *C.zend_array) bool` - Check if a PHP array is packed (indexed only) or associative (key-value pairs) ### Working with Callables diff --git a/docs/fr/extensions.md b/docs/fr/extensions.md index 1e03fbc54..caf50e9ca 100644 --- a/docs/fr/extensions.md +++ b/docs/fr/extensions.md @@ -209,6 +209,7 @@ func process_data_packed(arr *C.zval) unsafe.Pointer { - `frankenphp.GoAssociativeArray(arr unsafe.Pointer, ordered bool) frankenphp.AssociativeArray` - Convertir un tableau PHP vers un `AssociativeArray` Go ordonné (map avec ordre) - `frankenphp.GoMap(arr unsafe.Pointer) map[string]any` - Convertir un tableau PHP vers une map Go non ordonnée - `frankenphp.GoPackedArray(arr unsafe.Pointer) []any` - Convertir un tableau PHP vers un slice Go +- `frankenphp.IsPacked(zval *C.zend_array) bool` - Vérifie si le tableau PHP est une liste ou un tableau associatif ### Travailler avec des Callables diff --git a/types.go b/types.go index 3128a7c50..17a2d5506 100644 --- a/types.go +++ b/types.go @@ -416,6 +416,16 @@ func createNewArray(size uint32) *C.zend_array { return (*C.zend_array)(unsafe.Pointer(arr)) } +// IsPacked determines if the given zend_array is a packed array (list). +// Returns false if the array is nil or not packed. +func IsPacked(arr unsafe.Pointer) bool { + if arr == nil { + return false + } + + return htIsPacked((*C.zend_array)(arr)) +} + // htIsPacked checks if a zend_array is a list (packed) or hashmap (not packed). func htIsPacked(ht *C.zend_array) bool { flags := *(*C.uint32_t)(unsafe.Pointer(&ht.u[0]))