php数组拆分的算法问题
習慣沉默
習慣沉默 2017-05-16 13:08:40
0
2
760

把 字符串 $str = '12,34,5';
拆分成数组 $arr = [[1,3,5],[1,4,5],[2,3,5],[2,4,5]];
求把$str转成$arr的php逻辑算法;

習慣沉默
習慣沉默

全部回复 (2)
世界只因有你

说明一下,使用 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; }
      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!