【问题标题】:multidimensional array probability多维数组概率
【发布时间】:2019-08-02 08:30:13
【问题描述】:

美好的一天,我一直在玩这个问题一段时间了,似乎无法分析如何输出数组概率,使用 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);
                }
            }
        }
    }

非常感谢

【问题讨论】:

  • 我们可以更改 $arrayNms 以获得所需的输出吗?
  • $arrayNms 来自输入字段,任何东西都可以在那里给出

标签: javascript php arrays multidimensional-array


【解决方案1】:

这看起来像是大多数教科书给学生学习递归函数的挑战。这样的东西可以提供所需的输出,并且无论$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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 呃,这是 Java,OP 要求提供 JavaScript
    • 我猜,OP 卡在算法而不是编码上。
    【解决方案3】:

    在 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】:

      类似于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
      

      【讨论】:

        猜你喜欢
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 2011-12-05
        相关资源
        最近更新 更多