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

[email protected] ("Hartmut Holzgraefe")
Newsgroups php.version4
Message-ID <cvshholzgra958773638@cvsserver>
hholzgra		Sat May 20 00:00:38 2000 EDT

  Modified files:
    /php4/ext/standard	php_string.h string.c 
  Log:
  added optional 3rd parameter 'limit' to explode() as in split()
  (due to feature request in bug id #3251)
  
  
Index: php4/ext/standard/php_string.h
diff -u php4/ext/standard/php_string.h:1.12 php4/ext/standard/php_string.h:1.13
--- php4/ext/standard/php_string.h:1.12	Wed Apr 26 02:29:59 2000
+++ php4/ext/standard/php_string.h	Sat May 20 00:00:38 2000
@@ -29,7 +29,7 @@
  */
 
 
-/* $Id: php_string.h,v 1.12 2000/04/26 00:29:59 andrei Exp $ */
+/* $Id: php_string.h,v 1.13 2000/05/19 22:00:38 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); 
Index: php4/ext/standard/string.c
diff -u php4/ext/standard/string.c:1.110 php4/ext/standard/string.c:1.111
--- php4/ext/standard/string.c:1.110	Thu May 18 17:34:35 2000
+++ php4/ext/standard/string.c	Sat May 20 00:00:38 2000
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.110 2000/05/18 15:34:35 zeev Exp $ */
+/* $Id: string.c,v 1.111 2000/05/19 22:00:38 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,23 +229,38 @@
 		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) {
-		WRONG_PARAM_COUNT;
-	}
+	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);
 	convert_to_string_ex(delim);
@@ -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);
+	}
 }
 /* }}} */
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.