84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
把 字符串 $str = '12,34,5';拆分成数组 $arr = [[1,3,5],[1,4,5],[2,3,5],[2,4,5]];求把$str转成$arr的php逻辑算法;
说明一下,使用 global 可能看上去不那么优雅,但是这里我就是写一个示例方法,不就过于纠结啦,可自行优化
$str = '12,34,5'; $arr = explode(',', $str); $step = $book = $result = []; dfs(0); print_r($result); $str = '12,34'; $arr = explode(',', $str); $step = $book = $result = []; dfs(0); print_r($result); $str = '12,34,5,67'; $arr = explode(',', $str); $step = $book = $result = []; dfs(0); print_r($result); function dfs($s) { global $arr, $step, $result, $book; if (!isset($arr[$s])) { $result[] = array_values($step); return; } for ($i = 0; $i < strlen($arr[$s]); $i++) { if (!isset($book[$s][$i]) || $book[$s][$i] == 0) { $book[$s][$i] = 1; $step[$s] = $arr[$s][$i]; dfs($s + 1); $book[$s][$i] = 0; } } return; }
两个数组很好组合,2个嵌套的for循环即可,不确定个数的多数组就没法这么处理了,可以参考一些排序算法的思路,多数组就通过递归其转换为2个数组,如:[[1,2],[3,4],[5]],将其转换为[[13,14,23,24],[5]],最后2个嵌套的for循环解决,参考代码:
$str = '12,34,5'; $arr = []; foreach (explode(',', $str) as $v) { $arr[] = str_split($v); } print_r(fun($arr)); function fun($arr) { if (count($arr) >= 2) { $tmparr = []; $arr1 = array_shift($arr); $arr2 = array_shift($arr); foreach ($arr1 as $v1) { foreach ($arr2 as $v2) { $tmparr[] = $v1 . $v2; } } array_unshift($arr, $tmparr); $arr = fun($arr); } return $arr; }
说明一下,使用 global 可能看上去不那么优雅,但是这里我就是写一个示例方法,不就过于纠结啦,可自行优化
两个数组很好组合,2个嵌套的for循环即可,不确定个数的多数组就没法这么处理了,可以参考一些排序算法的思路,多数组就通过递归其转换为2个数组,如:[[1,2],[3,4],[5]],将其转换为[[13,14,23,24],[5]],最后2个嵌套的for循环解决,参考代码: