Densol
Densol

Reputation: 135

multidimensional array probability

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

Upvotes: 1

Views: 379

Answers (4)

Progrock
Progrock

Reputation: 7485

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

Upvotes: 1

Slawomir Dziuba
Slawomir Dziuba

Reputation: 1325

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

Upvotes: 1

vasha
vasha

Reputation: 136

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

Upvotes: 1

rickdenhaan
rickdenhaan

Reputation: 11328

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

Upvotes: 3

Related Questions