PHP 多维数组键组合/组合


PHP multidimensional array keys combinations/combinatorics

好的,我有一些与PHP有关的任务,我将不胜感激。所以,假设我有这样的多维数组:

$testarray = array(0 => array(10, 20, 30),
                   1 => array(50, 60, 70),
                   2 => array(80, 90, 100),
                   .
                   .
                   .
                   n => array("", "", "",)
             );
数组

中的值无关紧要,重要的是数组键。在这种情况下,我在每个数组元素中有 3 个键,所以当排列完成后,最终结果应如下所示:

[0] => Array (
              [0] => 1 1 1
              [1] => 2 1 1
              [2] => 3 1 1
              [3] => 1 2 1
              [4] => 2 2 1
              [5] => 3 2 1
              [6] => 1 3 1
              [7] => 2 3 1
              . 
              .
              .
              [n] => 3 3 3
              )

在 4 个数组键的情况下,最终结果应如下所示:

[0] = Array (
             [0] => 1 1 1 1
             [1] => 2 1 1 1
             [2] => 3 1 1 1
             [3] => 4 1 1 1
             [4] => 1 2 1 1
             .
             .
             .
             [n] => 4 4 4 4
            )

如果可能的话,我想避免递归。

我在可视化整个循环过程和初始化所需变量时遇到问题。我真的很感激一些帮助。谢谢。

我对原始代码进行了一些轻微的修改,以使其使用键的数量而不是数组值,然后我添加了第二个函数以允许对多维数组进行计数。

<?php
function everyCombination($array) {
  $newArray = array();
  for($keyCount = 1; $keyCount <= count($array); $keyCount++){
    $newArray[] = $keyCount;
  }
  $arrayCount      = count($newArray);
  $maxCombinations = pow($arrayCount, $arrayCount);
  $returnArray     = array();
  $conversionArray = array();
  foreach ($newArray as $key => $value) {
    $conversionArray[base_convert($key, 10, $arrayCount)] = $value;
  }
  for ($i = 0; $i < $maxCombinations; $i++) {
    $combination = base_convert($i, 10, $arrayCount);
    $combination = str_pad($combination, $arrayCount, "0", STR_PAD_LEFT);
    $returnArray[] = strtr($combination, $conversionArray);
  }
  return $returnArray;
}
function getCombos($array){
    if(is_array($array[key($array)])){
        $return = array();
        foreach($array as $subArray){
            $return[] = everyCombination($subArray);
        }
    }else{
        $return = everyCombination($array);
    }
    return $return;
}

$test = array(53,22,1233,45);
echo '<pre>';
print_r(getCombos($test));
echo '</pre>';

功能和使用的所有功劳都归 https://stackoverflow.com/a/14022357/2285345