多维数组概率

问题描述 投票:1回答:4

美好的一天,我一直在玩这个问题一段时间了,似乎无法分析如何输出数组概率,使用PHP或javascript,有人设法解决这个问题,提前谢谢

例:

$arrayNms = [
    ["A", "B", "C"],
    ["Q", "P"],
    ["CC", "C3"]
];


/*
OUTPUT
A, Q, CC
A, Q, C3
A, P, CC
A, P, C3
B, Q, CC
B, Q, C3
B, P, CC
B, P, C3
C, Q, CC
C, Q, C3
C, P, CC
C, P, C3
*/

//this is what I got so far, but can't seem to output the desired values
    $arr1 = [];
    for ($i = count($arrayNms) - 1; $i >= 0; $i--) {
        for ($j=0; $j < count($arrayNms[$i]); $j++) { 
            $prdName1 = $arrayNms[$i][$j];
            if(array_key_exists(($i+1), $arrayNms)){
                for ($k=0; $k < count($arrayNms[$i+1]); $k++) { 
                    $prdName2 = $arrayNms[$i][$k];
                    print_r($prdName2.', '.$prdName1);
                }
            }
        }
    }

非常感谢你

javascript php arrays multidimensional-array
4个回答
3
投票

这看起来像大多数教科书给学生学习递归功能的挑战。像这样的东西可以提供所需的输出,并且无论$arrayNms中有多少个值数组(只要至少有一个),它都会起作用:

function print_values($array, $index = 0, $base = "") {
    // check if there's another array of values after this one
    $is_last = !isset($array[$index + 1]);

    // loop through all values in the given sub-array
    foreach ($array[$index] as $value) {
        if ($is_last) {
            // if this is the last array of values, output the current value
            echo $base . $value . PHP_EOL;
        } else {
            // otherwise, append this value to the base and process the next array
            print_values($array, $index + 1, $base . $value . ", ");
        }
    }
}

$arrayNms = [
    ["A", "B", "C"],
    ["Q", "P"],
    ["CC", "C3"]
];

print_values($arrayNms);

输出:

A, Q, CC
A, Q, C3
A, P, CC
A, P, C3
B, Q, CC
B, Q, C3
B, P, CC
B, P, C3
C, Q, CC
C, Q, C3
C, P, CC
C, P, C3

1
投票

在Java中

public class MyClass {
    public static void main(String args[]) {
        String[][] arr = {{"A","B","C"},{"P","Q"},{"CC","C3"}};
        print(arr, 0);
    }


    public static void  print(String[][] arr, int depth)
    {
        if(depth == arr.length)
        {
            for(int i =0; i < arr.length - 1 ; i++)
            {
                System.out.print(arr[i][0] + ",");
            }
            System.out.print(arr[arr.length - 1][0]);
            System.out.println("\r");
        }
        else
        {
            for(int j =0; j < arr[depth].length ; j++)
            {
                String temp = arr[depth][j];
                arr[depth][j] = arr[depth][0];
                arr[depth][0] = temp;
                print(arr, depth + 1);
            }
        }
    }
}

1
投票

在JavaScript中:

var myArr = [
    ["A", "B", "C"],
    ["Q", "P"],
    ["CC", "C3"]
];

for (var el1 in myArr[0]) {
    for (var el2 in myArr[1]) {
        for (var el3 in myArr[2]) {
            console.log(myArr[0][el1]+', '+myArr[1][el2]+', '+myArr[2][el3]);
        }    
    }  
}




/*
A, Q, CC
A, Q, C3
A, P, CC
A, P, C3
B, Q, CC
B, Q, C3
B, P, CC
B, P, C3
C, Q, CC
C, Q, C3
C, P, CC
C, P, C3
*/

var myArr = [
    ["A", "B", "C"],
    ["Q", "P"],
    ["CC", "C3"]
];

for (var el1 in myArr[0]) {
    for (var el2 in myArr[1]) {
        for (var el3 in myArr[2]) {
            console.log(myArr[0][el1]+', '+myArr[1][el2]+', '+myArr[2][el3]);
        }    
    }  
}

1
投票

Slawomir's JS answer相似:

<?php

$items = [
    ["A", "B", "C"],
    ["Q", "P"],
    ["CC", "C3"]
];

foreach($items[0] as $i)
    foreach($items[1] as $j)
        foreach($items[2] as $k)
            printf("%s, %s, %s\n", $i, $j, $k);

输出:

A, Q, CC
A, Q, C3
A, P, CC
A, P, C3
B, Q, CC
B, Q, C3
B, P, CC
B, P, C3
C, Q, CC
C, Q, C3
C, P, CC
C, P, C3
© www.soinside.com 2019 - 2024. All rights reserved.