cvs: php4 /ext/standard/ php_string.h string.c

[email protected] ("Hartmut Holzgraefe")
Newsgroups php.version4
Message-ID <cvshholzgra959058268@cvsserver>
hholzgra		Tue May 23 07:04:28 2000 EDT

  Modified files:
    /php4/ext/standard	string.c php_string.h 
  Log:
  again (due to feature request in bug id #3251)
  added optional 3rd parameter 'limit' to explode() as in split()
  
  
Index: php4/ext/standard/string.c
diff -u php4/ext/standard/string.c:1.112 php4/ext/standard/string.c:1.113
--- php4/ext/standard/string.c:1.112	Sat May 20 07:07:53 2000
+++ php4/ext/standard/string.c	Tue May 23 07:04:28 2000
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.112 2000/05/20 05:07:53 hholzgra Exp $ */
+/* $Id: string.c,v 1.113 2000/05/23 05:04:28 hholzgra Exp $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
@@ -213,7 +213,7 @@
 }
 /* }}} */
 
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value) 
+PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit) 
 {
 	char *p1, *p2, *endp;
 	int i = 0;
@@ -229,22 +229,37 @@
 		do {
 			add_index_stringl(return_value, i++, p1, p2-p1, 1);
 			p1 = p2 + delim->value.str.len;
+			if((limit>=0)&&(i>=limit-1))
+				break;
 		} while ((p2 = php_memnstr(p1, delim->value.str.val, delim->value.str.len, endp)) != NULL);
 
-		if (p1 <= endp) {
+		if ((p1 <= endp)|| ((limit>=0)&&(i>=limit-1))){
 			add_index_stringl(return_value, i++, p1, endp-p1, 1);
 		}
 	}
 }
 
-/* {{{ proto array explode(string separator, string str)
+/* {{{ proto array explode(string separator, string str [, int limit])
    Split a string on string separator and return array of components */
 PHP_FUNCTION(explode)
 {
-	zval **str, **delim;
+	zval **str, **delim, **zlimit = NULL;
+	int limit;
 
-	if (ARG_COUNT(ht) != 2 || zend_get_parameters_ex(2, &delim, &str) == FAILURE) {
+	switch (ARG_COUNT(ht)) {
+	case 2:
+		if (zend_get_parameters_ex(2, &delim, &str) == FAILURE)
+			WRONG_PARAM_COUNT;
+		limit=-1;
+		break;
+	case 3:
+		if (zend_get_parameters_ex(3, &delim, &str, &zlimit) == FAILURE)
 		WRONG_PARAM_COUNT;
+		convert_to_long_ex(zlimit);
+		limit = (*zlimit)->value.lval;
+		break;
+	default:
+		WRONG_PARAM_COUNT;                                         
 	}
 
 	convert_to_string_ex(str);
@@ -259,7 +274,11 @@
 		RETURN_FALSE;
 	}
 
-	php_explode(*delim, *str, return_value);
+	if((limit==0)||(limit==1)) {
+		add_index_stringl(return_value, 0, (*str)->value.str.val, (*str)->value.str.len, 1);
+	} else {
+		php_explode(*delim, *str, return_value, limit);
+	}
 }
 /* }}} */
 
Index: php4/ext/standard/php_string.h
diff -u php4/ext/standard/php_string.h:1.14 php4/ext/standard/php_string.h:1.15
--- php4/ext/standard/php_string.h:1.14	Sat May 20 07:07:53 2000
+++ php4/ext/standard/php_string.h	Tue May 23 07:04:28 2000
@@ -29,7 +29,7 @@
  */
 
 
-/* $Id: php_string.h,v 1.14 2000/05/20 05:07:53 hholzgra Exp $ */
+/* $Id: php_string.h,v 1.15 2000/05/23 05:04:28 hholzgra Exp $ */
 
 /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
 
@@ -109,7 +109,7 @@
 PHPAPI void php_char_to_str(char *str, uint len, char from, char *to, int to_len, pval *result);
 
 PHPAPI void php_implode(pval *delim, pval *arr, pval *return_value);
-PHPAPI void php_explode(pval *delim, pval *str, pval *return_value);
+PHPAPI void php_explode(pval *delim, pval *str, pval *return_value, int limit);
 PHPAPI inline char *php_memnstr(char *haystack, char *needle, int needle_len, char *end);
 PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end); 
 PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.