Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja count
Forum PHP.pl > Forum > Przedszkole
rudald
1. Czy ktoś ma może dostęp do kodu funkcji "count" lub mógłby mi wytłumaczyć gdzie ją znaleźć?

2. W c++ ostatnim znakiem jest '\0' i wtedy następuje koniec tablicy, czy owy znak istnieje w php jeśli tak to w jakiej postaci?
redeemer
Mylisz pojęcia. W C/C++ (chociaż to głównie w C, bo w C++ jest obiekt string) jeżeli mieliśmy tablicę znakową (tzw. "string") to była ona kończona \0, żeby takie funkcje jak printf, strlen itd. wiedziały gdzie kończy się łanćuch.

Jeżeli chcesz policzyć długość łańcucha w PHP - funkcja strlen (dla UTF8 mb_strlen), policzyć ilość elementów tablicy - funkcja count.

Bebechy funkcji count:
Kod
/* {{{ proto int count(mixed var [, int mode])
   Count the number of elements in a variable (usually an array) */
PHP_FUNCTION(count)
{
    zval *array;
    long mode = COUNT_NORMAL;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE) {
        return;
    }

    switch (Z_TYPE_P(array)) {
        case IS_NULL:
            RETURN_LONG(0);
            break;
        case IS_ARRAY:
            RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC));
            break;
        case IS_OBJECT: {
#ifdef HAVE_SPL
            zval *retval;
#endif
            /* first, we check if the handler is defined */
            if (Z_OBJ_HT_P(array)->count_elements) {
                RETVAL_LONG(1);
                if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) {
                    return;
                }
            }
#ifdef HAVE_SPL
            /* if not and the object implements Countable we call its count() method */
            if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) {
                zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval);
                if (retval) {
                    convert_to_long_ex(&retval);
                    RETVAL_LONG(Z_LVAL_P(retval));
                    zval_ptr_dtor(&retval);
                }
                return;
            }
#endif
        }
        default:
            RETURN_LONG(1);
            break;
    }
}
/* }}} */

Znajduje się ona w /ext/standard/array.c

PS. Jak chcesz wyszukać implementację jakiejś funkcji w źródłach PHP wyszukuj tekstu PHP_FUNCTION(nazwafunkcji).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.