Rumah > Soal Jawab > teks badan
Belah rentetan $str = '12,34,5';
Belahkannya kepada tatasusunan $arr = [[1,3,5],[1,4,5],[2,3, 5 ],[2,4,5]];
Mencari algoritma logik PHP untuk menukar $str kepada $arr;
世界只因有你2017-05-16 13:10:40
Jelaskan bahawa penggunaan global mungkin tidak kelihatan begitu elegan, tetapi di sini saya hanya menulis kaedah contoh Jika tidak terlalu mengelirukan, anda boleh mengoptimumkannya sendiri
$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;
}
PHP中文网2017-05-16 13:10:40
Dua tatasusunan adalah mudah untuk digabungkan Dua bersarang untuk gelung adalah mencukupi : [[1,2],[3,4],[5]], tukarkannya kepada [[13,14,23,24],[5]], dua terakhir bersarang untuk gelung Penyelesaian, kod rujukan:
$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;
}