@@ -71,35 +71,66 @@ public static function toInts(string $string, string $delimiter = ',', int $limi
7171 */
7272 public static function str2ints (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
7373 {
74- $ values = self ::splitTrimFiltered ($ str , $ delimiter , $ limit );
74+ $ intArr = [];
75+ // $values = self::splitTrimFiltered($str, $delimiter, $limit);
76+ $ values = self ::toNoEmptyArray ($ str , $ delimiter , $ limit );
7577
76- return array_map ('intval ' , $ values );
78+ foreach ($ values as $ value ) {
79+ if (is_numeric ($ value )) {
80+ $ intArr [] = (int )$ value ;
81+ }
82+ }
83+
84+ return $ intArr ;
7785 }
7886
7987 /**
88+ * like explode, split string to no empty array
89+ *
90+ * - Difference toNoEmptyArray() and splitTrimFiltered().
91+ *
92+ * Please see {@see StringHelperTest::testDiff_splitTrimFiltered_toNoEmptyArray()}
93+ * So, recommend use toNoEmptyArray() instead splitTrimFiltered()
94+ *
8095 * @param string $str
81- * @param string $delimiter
82- * @param int $limit
96+ * @param string $sep
97+ * @param int $limit
8398 *
8499 * @return array
85100 */
86- public static function toArray (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
101+ public static function toNoEmptyArray (string $ str , string $ sep = ', ' , int $ limit = - 1 ): array
87102 {
88- return self ::splitTrimFiltered ($ str , $ delimiter , $ limit );;
103+ $ str = trim ($ str , "$ sep " );
104+ if (!$ str ) {
105+ return [];
106+ }
107+
108+ $ pattern = $ sep === ' ' ? '/\s+/ ' : "/\s* $ sep\s*/ " ;
109+ return preg_split ($ pattern , $ str , $ limit , PREG_SPLIT_NO_EMPTY );
89110 }
90111
91112 /**
92- * Like explode, but will trim each item and filter empty item.
113+ * @param string $str
114+ * @param string $sep
115+ * @param int $limit
93116 *
117+ * @return array
118+ */
119+ public static function splitNoEmptyArray (string $ str , string $ sep = ', ' , int $ limit = 0 ): array
120+ {
121+ return self ::toNoEmptyArray ($ str , $ sep , $ limit );;
122+ }
123+
124+ /**
94125 * @param string $str
95- * @param string $separator
126+ * @param string $sep
96127 * @param int $limit
97128 *
98129 * @return array
99130 */
100- public static function explode (string $ str , string $ separator = '. ' , int $ limit = 0 ): array
131+ public static function toArray (string $ str , string $ sep = ', ' , int $ limit = 0 ): array
101132 {
102- return self ::splitTrimFiltered ($ str , $ separator , $ limit );
133+ return self ::toNoEmptyArray ($ str , $ sep , $ limit ); ;
103134 }
104135
105136 /**
@@ -113,26 +144,22 @@ public static function explode(string $str, string $separator = '.', int $limit
113144 */
114145 public static function str2array (string $ str , string $ sep = ', ' , int $ limit = 0 ): array
115146 {
116- // $str = trim($str, "$sep ");
117- // if (!$str) {
118- // return [];
119- // }
120- // return preg_split("/\s*$sep\s*/", $str, -1, PREG_SPLIT_NO_EMPTY);
121- return self ::splitTrimFiltered ($ str , $ sep , $ limit );
147+ return self ::toNoEmptyArray ($ str , $ sep , $ limit );
122148 }
123149
124150 /**
125151 * Like explode, but will trim each item and filter empty item.
126152 *
127153 * @param string $str
128- * @param string $delimiter
154+ * @param string $separator
129155 * @param int $limit
130156 *
131157 * @return array
132158 */
133- public static function split2Array (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
159+ public static function explode (string $ str , string $ separator = '. ' , int $ limit = 0 ): array
134160 {
135- return self ::splitTrimFiltered ($ str , $ delimiter , $ limit );
161+ return self ::toNoEmptyArray ($ str , $ separator , $ limit );
162+ // return self::splitTrimFiltered($str, $separator, $limit);
136163 }
137164
138165 /**
@@ -144,9 +171,9 @@ public static function split2Array(string $str, string $delimiter = ',', int $li
144171 *
145172 * @return array
146173 */
147- public static function toTrimFilteredArray (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
174+ public static function split2Array (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
148175 {
149- return self ::splitTrimFiltered ($ str , $ delimiter , $ limit );
176+ return self ::toNoEmptyArray ($ str , $ delimiter , $ limit );
150177 }
151178
152179 /**
@@ -242,7 +269,8 @@ public static function splitTypedList(string $str, string $delimiter = ','): arr
242269 return [];
243270 }
244271
245- $ arr = self ::splitTrimFiltered ($ str , $ delimiter );
272+ // $arr = self::splitTrimFiltered($str, $delimiter);
273+ $ arr = self ::toNoEmptyArray ($ str , $ delimiter );
246274 foreach ($ arr as &$ val ) {
247275 if (is_numeric ($ val ) && strlen ($ val ) < 11 ) {
248276 $ val = str_contains ($ val , '. ' ) ? (float )$ val : (int )$ val ;
0 commit comments