77trait Investigator
88{
99 /**
10- * @param array<string> $array
10+ * @param array<string|array<string> > $array
1111 * @return array<string>
1212 */
1313 private function lowercasesIn (array $ array ): array
@@ -19,6 +19,12 @@ private function lowercasesIn(array $array): array
1919 continue ;
2020 }
2121
22+ if (is_array ($ word )) {
23+ array_push ($ unwanted , ...$ this ->lowercasesIn ($ word ));
24+
25+ continue ;
26+ }
27+
2228 if (! ctype_lower (preg_replace ('/[^A-Za-z]/ ' , '' , $ word ))) {
2329 $ unwanted [] = $ word ;
2430 }
@@ -28,20 +34,51 @@ private function lowercasesIn(array $array): array
2834 }
2935
3036 /**
31- * @param array<string> $array
37+ * @param array<string|array<string> > $array
3238 * @return array<string>
3339 */
3440 private function duplicatesIn (array $ array ): array
3541 {
36- return array_diff_assoc ($ array , array_unique ($ array ));
42+ $ unwanted = [];
43+ $ unique = [];
44+
45+ foreach ($ array as $ word ) {
46+ if (is_array ($ word )) {
47+ array_push ($ unwanted , ...$ this ->duplicatesIn ($ word ));
48+
49+ continue ;
50+ }
51+
52+ if (! in_array ($ word , $ unique )) {
53+ $ unique [] = $ word ;
54+ } else {
55+ $ unwanted [] = $ word ;
56+ }
57+ }
58+
59+ return $ unwanted ;
3760 }
3861
3962 /**
40- * @param array<string> $array
63+ * @param array<string|array<string> > $array
4164 * @return array<string>
4265 */
4366 private function singleWordsIn (array $ array ): array
4467 {
45- return array_filter ($ array , fn (string $ word ): bool => str_contains (trim ($ word ), ' ' ));
68+ $ unwanted = [];
69+
70+ foreach ($ array as $ word ) {
71+ if (is_array ($ word )) {
72+ array_push ($ unwanted , ...$ this ->singleWordsIn ($ word ));
73+
74+ continue ;
75+ }
76+
77+ if (str_contains (trim ((string ) $ word ), ' ' )) {
78+ $ unwanted [] = $ word ;
79+ }
80+ }
81+
82+ return $ unwanted ;
4683 }
4784}
0 commit comments