为了账号安全,请及时绑定邮箱和手机立即绑定

从php中的两个数组生成所有组合

从php中的两个数组生成所有组合

PHP
慕的地10843 2021-09-18 17:00:12
我有两个这样的数组:$a = array("abc","defs","ghi");$b = array("abcs","def","ghis");我想要像这样的字符串的所有组合:abc defs ghiabc def ghiabc def ghisabc defs ghisabcs defs ghiabcs def ghiabcs def ghisabcs defs ghis如何在 php 中做到这一点?PS - 数组可以是任意长度,但两个数组的大小始终相同。PPS - 在这个问题中给出的公认答案没有给我正确的结果。它给出了以下结果:Array ( [0] => Array ( [0] => abc [1] => abcs ) [1] => Array ( [0] => abc [1] => def ) [2] => Array ( [0] => abc [1] => ghi ) [3] => Array ( [0] => defs [1] => abcs ) [4] => Array ( [0] => defs [1] => def ) [5] => Array ( [0] => defs [1] => ghi ) [6] => Array ( [0] => ghi [1] => abcs ) [7] => Array ( [0] => ghi [1] => def ) [8] => Array ( [0] => ghi [1] => ghi ) ) 
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

你需要将你的数组转换成这个,


$a    = ["abc", "defs", "ghi"];

$b    = ["abcs", "def", "ghis"];

$temp = array_map(null, $a, $b); // this conversion we call it transposing of array

function combinations($arrays)

{

    $result = [];

    $arrays = array_values($arrays);

    $sizeIn = sizeof($arrays);

    $size   = $sizeIn > 0 ? 1 : 0;

    foreach ($arrays as $array) {

        $size = $size * sizeof($array);

    }

    for ($i = 0; $i < $size; $i++) {

        $result[$i] = [];

        for ($j = 0; $j < $sizeIn; $j++) {

            array_push($result[$i], current($arrays[$j]));

        }

        for ($j = ($sizeIn - 1); $j >= 0; $j--) {

            if (next($arrays[$j])) {

                break;

            } elseif (isset($arrays[$j])) {

                reset($arrays[$j]);

            }

        }

    }

    return $result;

}

$res = combinations($temp);

// imploding all the values internally with space

$temp = array_map(function($item){

    return implode(" ", $item);

},$res);

// looping to show the data

foreach($temp as $val){

    echo $val."\n";

}

使用 array_map 转换数组后,我使用了this 的帮助。


演示。


输出


abc defs ghi

abc defs ghis

abc def ghi

abc def ghis

abcs defs ghi

abcs defs ghis

abcs def ghi

abcs def ghis


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 246 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信