multidimensional array probability

喜夏-厌秋 提交于 2020-01-05 08:04:21

问题


Good day, I have been playing with this problem for some time now, and can't seem to analyze how to output the array probabilities, using PHP or javascript, had anyone manage to solve this problem, thanks in advance

example:

$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);
                }
            }
        }
    }

thank you very much


回答1:


This looks like the kind of challenge most textbooks give students to learn about recursive functions. Something like this would provide the desired output, and will work no matter how many arrays of values are in $arrayNms (as long as there is at least one):

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);

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



回答2:


In 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);
            }
        }
    }
}



回答3:


In 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]);
        }    
    }  
}



回答4:


Similar to 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);

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


来源:https://stackoverflow.com/questions/55111805/multidimensional-array-probability

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!