Struct ext_php_rs::ffi::_zend_array
source · #[repr(C)]pub struct _zend_array {
pub gc: zend_refcounted_h,
pub u: _zend_array__bindgen_ty_1,
pub nTableMask: u32,
pub __bindgen_anon_1: _zend_array__bindgen_ty_2,
pub nNumUsed: u32,
pub nNumOfElements: u32,
pub nTableSize: u32,
pub nInternalPointer: u32,
pub nNextFreeElement: zend_long,
pub pDestructor: dtor_func_t,
}
Fields§
§gc: zend_refcounted_h
§u: _zend_array__bindgen_ty_1
§nTableMask: u32
§__bindgen_anon_1: _zend_array__bindgen_ty_2
§nNumUsed: u32
§nNumOfElements: u32
§nTableSize: u32
§nInternalPointer: u32
§nNextFreeElement: zend_long
§pDestructor: dtor_func_t
Implementations§
source§impl _zend_array
impl _zend_array
sourcepub fn with_capacity(size: u32) -> ZBox<Self>
pub fn with_capacity(size: u32) -> ZBox<Self>
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the current number of elements in the array.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push(1);
ht.push("Hello, world");
assert_eq!(ht.len(), 2);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns whether the hash table is empty.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
assert_eq!(ht.is_empty(), true);
ht.push(1);
ht.push("Hello, world");
assert_eq!(ht.is_empty(), false);
sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the hash table, removing all values.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert("test", "hello world");
assert_eq!(ht.is_empty(), false);
ht.clear();
assert_eq!(ht.is_empty(), true);
sourcepub fn get(&self, key: &str) -> Option<&Zval>
pub fn get(&self, key: &str) -> Option<&Zval>
Attempts to retrieve a value from the hash table with a string key.
§Parameters
key
- The key to search for in the hash table.
§Returns
Some(&Zval)
- A reference to the zval at the position in the hash table.None
- No value at the given position was found.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert("test", "hello world");
assert_eq!(ht.get("test").and_then(|zv| zv.str()), Some("hello world"));
sourcepub fn get_mut(&self, key: &str) -> Option<&mut Zval>
pub fn get_mut(&self, key: &str) -> Option<&mut Zval>
Attempts to retrieve a value from the hash table with a string key.
§Parameters
key
- The key to search for in the hash table.
§Returns
Some(&Zval)
- A reference to the zval at the position in the hash table.None
- No value at the given position was found.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert("test", "hello world");
assert_eq!(ht.get("test").and_then(|zv| zv.str()), Some("hello world"));
sourcepub fn get_index(&self, key: u64) -> Option<&Zval>
pub fn get_index(&self, key: u64) -> Option<&Zval>
Attempts to retrieve a value from the hash table with an index.
§Parameters
key
- The key to search for in the hash table.
§Returns
Some(&Zval)
- A reference to the zval at the position in the hash table.None
- No value at the given position was found.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push(100);
assert_eq!(ht.get_index(0).and_then(|zv| zv.long()), Some(100));
sourcepub fn get_index_mut(&self, key: u64) -> Option<&mut Zval>
pub fn get_index_mut(&self, key: u64) -> Option<&mut Zval>
Attempts to retrieve a value from the hash table with an index.
§Parameters
key
- The key to search for in the hash table.
§Returns
Some(&Zval)
- A reference to the zval at the position in the hash table.None
- No value at the given position was found.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push(100);
assert_eq!(ht.get_index(0).and_then(|zv| zv.long()), Some(100));
sourcepub fn remove(&mut self, key: &str) -> Option<()>
pub fn remove(&mut self, key: &str) -> Option<()>
Attempts to remove a value from the hash table with a string key.
§Parameters
key
- The key to remove from the hash table.
§Returns
Some(())
- Key was successfully removed.None
- No key was removed, did not exist.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert("test", "hello world");
assert_eq!(ht.len(), 1);
ht.remove("test");
assert_eq!(ht.len(), 0);
sourcepub fn remove_index(&mut self, key: u64) -> Option<()>
pub fn remove_index(&mut self, key: u64) -> Option<()>
Attempts to remove a value from the hash table with a string key.
§Parameters
key
- The key to remove from the hash table.
§Returns
Ok(())
- Key was successfully removed.None
- No key was removed, did not exist.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push("hello");
assert_eq!(ht.len(), 1);
ht.remove_index(0);
assert_eq!(ht.len(), 0);
sourcepub fn insert<V>(&mut self, key: &str, val: V) -> Result<()>where
V: IntoZval,
pub fn insert<V>(&mut self, key: &str, val: V) -> Result<()>where
V: IntoZval,
Attempts to insert an item into the hash table, or update if the key already exists. Returns nothing in a result if successful.
§Parameters
key
- The key to insert the value at in the hash table.value
- The value to insert into the hash table.
§Returns
Returns nothing in a result on success. Returns an error if the key
could not be converted into a CString
, or converting the value into
a Zval
failed.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert("a", "A");
ht.insert("b", "B");
ht.insert("c", "C");
assert_eq!(ht.len(), 3);
sourcepub fn insert_at_index<V>(&mut self, key: u64, val: V) -> Result<()>where
V: IntoZval,
pub fn insert_at_index<V>(&mut self, key: u64, val: V) -> Result<()>where
V: IntoZval,
Inserts an item into the hash table at a specified index, or updates if the key already exists. Returns nothing in a result if successful.
§Parameters
key
- The index at which the value should be inserted.val
- The value to insert into the hash table.
§Returns
Returns nothing in a result on success. Returns an error if converting
the value into a Zval
failed.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.insert_at_index(0, "A");
ht.insert_at_index(5, "B");
ht.insert_at_index(0, "C"); // notice overriding index 0
assert_eq!(ht.len(), 2);
sourcepub fn push<V>(&mut self, val: V) -> Result<()>where
V: IntoZval,
pub fn push<V>(&mut self, val: V) -> Result<()>where
V: IntoZval,
Pushes an item onto the end of the hash table. Returns a result containing nothing if the element was successfully inserted.
§Parameters
val
- The value to insert into the hash table.
§Returns
Returns nothing in a result on success. Returns an error if converting
the value into a Zval
failed.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push("a");
ht.push("b");
ht.push("c");
assert_eq!(ht.len(), 3);
sourcepub fn has_numerical_keys(&self) -> bool
pub fn has_numerical_keys(&self) -> bool
Checks if the hashtable only contains numerical keys.
§Returns
True if all keys on the hashtable are numerical.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push(0);
ht.push(3);
ht.push(9);
assert!(ht.has_numerical_keys());
ht.insert("obviously not numerical", 10);
assert!(!ht.has_numerical_keys());
sourcepub fn has_sequential_keys(&self) -> bool
pub fn has_sequential_keys(&self) -> bool
Checks if the hashtable has numerical, sequential keys.
§Returns
True if all keys on the hashtable are numerical and are in sequential order (i.e. starting at 0 and not skipping any keys).
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
ht.push(0);
ht.push(3);
ht.push(9);
assert!(ht.has_sequential_keys());
ht.insert_at_index(90, 10);
assert!(!ht.has_sequential_keys());
sourcepub fn values(&self) -> Values<'_>
pub fn values(&self) -> Values<'_>
Returns an iterator over the values contained inside the hashtable, as if it was a set or list.
§Example
use ext_php_rs::types::ZendHashTable;
let mut ht = ZendHashTable::new();
for val in ht.values() {
dbg!(val);
}
sourcepub fn iter(&self) -> Iter<'_>
pub fn iter(&self) -> Iter<'_>
Returns an iterator over the key(s) and value contained inside the hashtable.
§Example
use ext_php_rs::types::{ZendHashTable, ArrayKey};
let mut ht = ZendHashTable::new();
for (key, val) in ht.iter() {
match &key {
ArrayKey::Long(index) => {
}
ArrayKey::String(key) => {
}
}
dbg!(key, val);
}