この記事では、主に PHP ソース コード 4 についての簡単な説明を紹介します。count 関数に関しては、必要な友人に参照してもらえるように共有します。面接や試験でよく目にする count 関数なので、詳しく見てみましょう
配列以外のカウント処理については、そのコードで確認できます
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 /* it the object implements Countable we call its count() method */ zval *retval; 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 /* if not we return the number of properties (not taking visibility into account) */ 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; } } } default: // 其它情况,如考试中常见的字符串等 RETURN_LONG(1); break; }}
で説明されています。マニュアル:
コードは次のとおりです。
$arr = array(1, 2, 3); $arr2 = array($arr, $arr); echo count($arr2), '<br />'; echo count($arr2, 1); /* 输出结果:28*/
If最初の次元のみが表示されます。配列を保存する HashTable の nNumOfElements 属性を直接返します。
実装コードは次のとおりです。
// php_count_recursive函数 array.c 251行cnt = zend_hash_num_elements(Z_ARRVAL_P(array)); ZEND_API int zend_hash_num_elements(HashTable *ht){ IS_CONSISTENT(ht); return ht->nNumOfElements;}
HashTable の単純な操作を直接実行したい場合は、 をクリックします。 PHP ソース コードの HashTable の簡単な例について
配列がどのように保存または走査されるかを確認したい場合は、Brother Bird の PHP 配列の詳細な理解 (走査順序)
## をクリックしてください。再帰が開始される場合は、count($arr, 1) を使用します。
プログラムは php_count_recursive 関数を再帰的に呼び出します。
HashTable の場合、プログラムは、この次元配列を含む二重リンク リストを走査し、保存されている pData を再帰的に走査します。すべてのノードが走査されるまで各ノードで繰り返します
[フィーリング]
HashTable は、配列の長さを計算したり、count 関数を呼び出したりする場合、非常に強力です。感謝のない仕事!
関連する推奨事項:
A PHP ソース コードについての簡単な説明 2: strlen、strtolower、strtoupper、ord、chr 関数について
PHP ソース コードについての簡単な説明 1:explode 関数と implode 関数
以上がPHP ソース コードについての簡単な説明 4: count 関数についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。