feat(types): expose IsPacked to help dealing with hashmaps and lists in Go code

This commit is contained in:
Alexandre Daubois
2025-12-15 15:35:21 +01:00
committed by GitHub
parent 3599299cde
commit 7fca07ed67
3 changed files with 12 additions and 0 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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]))