10
10
namespace Toolkit \Stdlib \Str \Traits ;
11
11
12
12
use Toolkit \Stdlib \Helper \DataHelper ;
13
+ use Toolkit \Stdlib \Str ;
13
14
use function array_map ;
14
15
use function array_values ;
15
16
use function count ;
16
17
use function explode ;
18
+ use function is_numeric ;
17
19
use function mb_convert_encoding ;
18
20
use function mb_convert_variables ;
19
21
use function mb_detect_encoding ;
20
22
use function mb_strwidth ;
21
23
use function preg_split ;
24
+ use function str_contains ;
22
25
use function str_pad ;
23
26
use function str_split ;
27
+ use function strlen ;
24
28
use function strpos ;
29
+ use function substr ;
25
30
use function trim ;
26
31
use const PREG_SPLIT_NO_EMPTY ;
27
32
@@ -46,25 +51,6 @@ public static function toBool(string $str): bool
46
51
/// split to array
47
52
////////////////////////////////////////////////////////////////////////
48
53
49
- /**
50
- * var_dump(str2array('34,56,678, 678, 89, '));
51
- *
52
- * @param string $str
53
- * @param string $sep
54
- *
55
- * @return array
56
- */
57
- public static function str2array (string $ str , string $ sep = ', ' ): array
58
- {
59
- $ str = trim ($ str , "$ sep " );
60
-
61
- if (!$ str ) {
62
- return [];
63
- }
64
-
65
- return preg_split ("/\s* $ sep\s*/ " , $ str , -1 , PREG_SPLIT_NO_EMPTY );
66
- }
67
-
68
54
/**
69
55
* @param string $string
70
56
* @param string $delimiter
@@ -78,15 +64,15 @@ public static function toInts(string $string, string $delimiter = ',', int $limi
78
64
}
79
65
80
66
/**
81
- * @param string $string
67
+ * @param string $str
82
68
* @param string $delimiter
83
69
* @param int $limit
84
70
*
85
71
* @return array
86
72
*/
87
- public static function str2ints (string $ string , string $ delimiter = ', ' , int $ limit = 0 ): array
73
+ public static function str2ints (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
88
74
{
89
- $ values = self ::toArray ( $ string , $ delimiter , $ limit );
75
+ $ values = self ::splitTrimFiltered ( $ str , $ delimiter , $ limit );
90
76
91
77
return array_map ('intval ' , $ values );
92
78
}
@@ -100,21 +86,7 @@ public static function str2ints(string $string, string $delimiter = ',', int $li
100
86
*/
101
87
public static function toArray (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
102
88
{
103
- $ str = trim ($ str );
104
- if ($ str === '' ) {
105
- return [];
106
- }
107
-
108
- $ values = [];
109
- $ rawList = $ limit < 1 ? explode ($ delimiter , $ str ) : explode ($ delimiter , $ str , $ limit );
110
-
111
- foreach ($ rawList as $ val ) {
112
- if (($ val = trim ($ val )) !== '' ) {
113
- $ values [] = $ val ;
114
- }
115
- }
116
-
117
- return $ values ;
89
+ return self ::splitTrimFiltered ($ str , $ delimiter , $ limit );;
118
90
}
119
91
120
92
/**
@@ -128,7 +100,26 @@ public static function toArray(string $str, string $delimiter = ',', int $limit
128
100
*/
129
101
public static function explode (string $ str , string $ separator = '. ' , int $ limit = 0 ): array
130
102
{
131
- return static ::split2Array ($ str , $ separator , $ limit );
103
+ return self ::splitTrimFiltered ($ str , $ separator , $ limit );
104
+ }
105
+
106
+ /**
107
+ * split to array.
108
+ *
109
+ * @param string $str
110
+ * @param string $sep
111
+ * @param int $limit
112
+ *
113
+ * @return array
114
+ */
115
+ public static function str2array (string $ str , string $ sep = ', ' , int $ limit = 0 ): array
116
+ {
117
+ // $str = trim($str, "$sep ");
118
+ // if (!$str) {
119
+ // return [];
120
+ // }
121
+ // return preg_split("/\s*$sep\s*/", $str, -1, PREG_SPLIT_NO_EMPTY);
122
+ return self ::splitTrimFiltered ($ str , $ sep , $ limit );
132
123
}
133
124
134
125
/**
@@ -141,6 +132,20 @@ public static function explode(string $str, string $separator = '.', int $limit
141
132
* @return array
142
133
*/
143
134
public static function split2Array (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
135
+ {
136
+ return self ::splitTrimFiltered ($ str , $ delimiter , $ limit );
137
+ }
138
+
139
+ /**
140
+ * Like explode, but will trim each item and filter empty item.
141
+ *
142
+ * @param string $str
143
+ * @param string $delimiter
144
+ * @param int $limit
145
+ *
146
+ * @return array
147
+ */
148
+ public static function splitTrimFiltered (string $ str , string $ delimiter = ', ' , int $ limit = 0 ): array
144
149
{
145
150
if (!$ str = trim ($ str )) {
146
151
return [];
@@ -150,16 +155,14 @@ public static function split2Array(string $str, string $delimiter = ',', int $li
150
155
return [$ str ];
151
156
}
152
157
153
- if ($ limit < 1 ) {
154
- $ list = explode ($ delimiter , $ str );
155
- } else {
156
- $ list = explode ($ delimiter , $ str , $ limit );
157
- }
158
+ $ list = $ limit < 1 ? explode ($ delimiter , $ str ) : explode ($ delimiter , $ str , $ limit );
158
159
159
160
return array_values (array_filter (array_map ('trim ' , $ list ), 'strlen ' ));
160
161
}
161
162
162
163
/**
164
+ * Like explode, but will trim each item.
165
+ *
163
166
* @param string $str
164
167
* @param string $delimiter
165
168
* @param int $limit
@@ -178,6 +181,27 @@ public static function splitTrimmed(string $str, string $delimiter = ',', int $l
178
181
return array_map ('trim ' , $ list );
179
182
}
180
183
184
+ /**
185
+ * @param string $str
186
+ * @param string $delimiter
187
+ *
188
+ * @return array
189
+ */
190
+ public static function splitTypedList (string $ str , string $ delimiter = ', ' ): array
191
+ {
192
+ if (!$ str ) {
193
+ return [];
194
+ }
195
+
196
+ $ arr = self ::splitTrimFiltered ($ str , $ delimiter );
197
+ foreach ($ arr as &$ val ) {
198
+ if (is_numeric ($ val ) && strlen ($ val ) < 11 ) {
199
+ $ val = str_contains ($ val , '. ' ) ? (float )$ val : (int )$ val ;
200
+ }
201
+ }
202
+
203
+ return $ arr ;
204
+ }
181
205
/**
182
206
* @param string $string
183
207
* @param int $width
0 commit comments