@@ -6591,24 +6591,22 @@ PHP_FUNCTION(array_filter)
6591
6591
/* }}} */
6592
6592
6593
6593
/* {{{ Internal function to find an array element for a user closure. */
6594
- static zend_result php_array_find (const HashTable * array , zend_fcall_info fci , zend_fcall_info_cache fci_cache , zval * result_key , zval * result_value , bool negate_condition )
6594
+ enum php_array_find_result {
6595
+ PHP_ARRAY_FIND_EXCEPTION = -1 ,
6596
+ PHP_ARRAY_FIND_NONE = 0 ,
6597
+ PHP_ARRAY_FIND_SOME = 1 ,
6598
+ };
6599
+
6600
+ static enum php_array_find_result php_array_find (const HashTable * array , zend_fcall_info fci , zend_fcall_info_cache fci_cache , zval * result_key , zval * result_value , bool negate_condition )
6595
6601
{
6596
6602
zend_ulong num_key ;
6597
6603
zend_string * str_key ;
6598
6604
zval retval ;
6599
6605
zval args [2 ];
6600
6606
zval * operand ;
6601
6607
6602
- if (result_value != NULL ) {
6603
- ZVAL_UNDEF (result_value );
6604
- }
6605
-
6606
- if (result_key != NULL ) {
6607
- ZVAL_UNDEF (result_key );
6608
- }
6609
-
6610
6608
if (zend_hash_num_elements (array ) == 0 ) {
6611
- return SUCCESS ;
6609
+ return PHP_ARRAY_FIND_NONE ;
6612
6610
}
6613
6611
6614
6612
ZEND_ASSERT (ZEND_FCI_INITIALIZED (fci ));
@@ -6631,7 +6629,7 @@ static zend_result php_array_find(const HashTable *array, zend_fcall_info fci, z
6631
6629
ZEND_ASSERT (result == SUCCESS );
6632
6630
6633
6631
if (UNEXPECTED (Z_ISUNDEF (retval ))) {
6634
- return FAILURE ;
6632
+ return PHP_ARRAY_FIND_EXCEPTION ;
6635
6633
}
6636
6634
6637
6635
bool retval_true = zend_is_true (& retval );
@@ -6649,103 +6647,75 @@ static zend_result php_array_find(const HashTable *array, zend_fcall_info fci, z
6649
6647
ZVAL_COPY (result_key , & args [1 ]);
6650
6648
}
6651
6649
6652
- break ;
6650
+ return PHP_ARRAY_FIND_SOME ;
6653
6651
}
6654
6652
} ZEND_HASH_FOREACH_END ();
6655
6653
6656
- return SUCCESS ;
6654
+ return PHP_ARRAY_FIND_NONE ;
6657
6655
}
6658
6656
/* }}} */
6659
6657
6660
6658
/* {{{ Search within an array and returns the first found element value. */
6661
6659
PHP_FUNCTION (array_find )
6662
6660
{
6663
- zval * array = NULL ;
6661
+ HashTable * array ;
6664
6662
zend_fcall_info fci ;
6665
6663
zend_fcall_info_cache fci_cache = empty_fcall_info_cache ;
6666
6664
6667
6665
ZEND_PARSE_PARAMETERS_START (2 , 2 )
6668
- Z_PARAM_ARRAY (array )
6666
+ Z_PARAM_ARRAY_HT (array )
6669
6667
Z_PARAM_FUNC (fci , fci_cache )
6670
6668
ZEND_PARSE_PARAMETERS_END ();
6671
6669
6672
- if (php_array_find (Z_ARR_P (array ), fci , fci_cache , NULL , return_value , false ) != SUCCESS ) {
6673
- RETURN_THROWS ();
6674
- }
6675
-
6676
- if (Z_TYPE_P (return_value ) == IS_UNDEF ) {
6677
- RETURN_NULL ();
6678
- }
6670
+ php_array_find (array , fci , fci_cache , NULL , return_value , false );
6679
6671
}
6680
6672
/* }}} */
6681
6673
6682
6674
/* {{{ Search within an array and returns the first found element key. */
6683
6675
PHP_FUNCTION (array_find_key )
6684
6676
{
6685
- zval * array = NULL ;
6677
+ HashTable * array ;
6686
6678
zend_fcall_info fci ;
6687
6679
zend_fcall_info_cache fci_cache = empty_fcall_info_cache ;
6688
6680
6689
6681
ZEND_PARSE_PARAMETERS_START (2 , 2 )
6690
- Z_PARAM_ARRAY (array )
6682
+ Z_PARAM_ARRAY_HT (array )
6691
6683
Z_PARAM_FUNC (fci , fci_cache )
6692
6684
ZEND_PARSE_PARAMETERS_END ();
6693
6685
6694
- if (php_array_find (Z_ARR_P (array ), fci , fci_cache , return_value , NULL , false ) != SUCCESS ) {
6695
- RETURN_THROWS ();
6696
- }
6697
-
6698
- if (Z_TYPE_P (return_value ) == IS_UNDEF ) {
6699
- RETURN_NULL ();
6700
- }
6686
+ php_array_find (array , fci , fci_cache , return_value , NULL , false );
6701
6687
}
6702
6688
/* }}} */
6703
6689
6704
6690
/* {{{ Checks if at least one array element satisfies a callback function. */
6705
6691
PHP_FUNCTION (array_any )
6706
6692
{
6707
- zval * array = NULL ;
6693
+ HashTable * array ;
6708
6694
zend_fcall_info fci ;
6709
6695
zend_fcall_info_cache fci_cache = empty_fcall_info_cache ;
6710
6696
6711
6697
ZEND_PARSE_PARAMETERS_START (2 , 2 )
6712
- Z_PARAM_ARRAY (array )
6698
+ Z_PARAM_ARRAY_HT (array )
6713
6699
Z_PARAM_FUNC (fci , fci_cache )
6714
6700
ZEND_PARSE_PARAMETERS_END ();
6715
6701
6716
- if (php_array_find (Z_ARR_P (array ), fci , fci_cache , return_value , NULL , false ) != SUCCESS ) {
6717
- RETURN_THROWS ();
6718
- }
6719
-
6720
- bool retval = !Z_ISUNDEF_P (return_value );
6721
- if (Z_TYPE_P (return_value ) == IS_STRING ) {
6722
- zval_ptr_dtor_str (return_value );
6723
- }
6724
- RETURN_BOOL (retval );
6702
+ RETURN_BOOL (php_array_find (array , fci , fci_cache , NULL , NULL , false) == PHP_ARRAY_FIND_SOME );
6725
6703
}
6726
6704
/* }}} */
6727
6705
6728
6706
/* {{{ Checks if all array elements satisfy a callback function. */
6729
6707
PHP_FUNCTION (array_all )
6730
6708
{
6731
- zval * array = NULL ;
6709
+ HashTable * array ;
6732
6710
zend_fcall_info fci ;
6733
6711
zend_fcall_info_cache fci_cache = empty_fcall_info_cache ;
6734
6712
6735
6713
ZEND_PARSE_PARAMETERS_START (2 , 2 )
6736
- Z_PARAM_ARRAY (array )
6714
+ Z_PARAM_ARRAY_HT (array )
6737
6715
Z_PARAM_FUNC (fci , fci_cache )
6738
6716
ZEND_PARSE_PARAMETERS_END ();
6739
6717
6740
- if (php_array_find (Z_ARR_P (array ), fci , fci_cache , return_value , NULL , true ) != SUCCESS ) {
6741
- RETURN_THROWS ();
6742
- }
6743
-
6744
- bool retval = Z_ISUNDEF_P (return_value );
6745
- if (Z_TYPE_P (return_value ) == IS_STRING ) {
6746
- zval_ptr_dtor_str (return_value );
6747
- }
6748
- RETURN_BOOL (retval );
6718
+ RETURN_BOOL (php_array_find (array , fci , fci_cache , NULL , NULL , true) == PHP_ARRAY_FIND_NONE );
6749
6719
}
6750
6720
/* }}} */
6751
6721
0 commit comments