Permutation of Array PHP

前端 未结 3 704
花落未央
花落未央 2020-12-07 04:46

I have the following problem:

$multidmimensional = array(

 [0] => array(
    [0] => 1, 
    [1] => 2, 
    [2] => 3
  );


  [1] => array(
           


        
相关标签:
3条回答
  • 2020-12-07 05:09
    $data = array
    (
      '1' => array(5, 6, 7),
      '2' => array(9, 25, 14)
    
    );
    
    for($i=0; $i<=count(array_keys($data)); $i++) {
       for($j=1; $j<=2; $j++) {
          $values[$i][] = $data[$j][$i];
       }
    }
    
    for($i=0; $i<count($values); $i++) {
      shuffle($values[$i]);
    }
    
    $newData = array();
    for($i=0; $i<3; $i++) {
       for($j=1; $j<=2; $j++) {
           $newData[$j][] = array_pop($values[$i]);
       }
    }
    print_r($newData);
    

    Fiddle

    0 讨论(0)
  • 2020-12-07 05:13

    I can not test it right now but this should work: (may contain typos)

    function permute($arrays){
          if(count($arrays)<2) return $arrays[0];//TODO error on count == 0
          $array1 = array_shift($arrays);
          $array2 = array_shift($arrays);
          $results = array();
          foreach($array1 as $elementOfOne){
            foreach($array2 as $elementOfTwo){
              $results[] = $elemnetOfOne . $elementOfTwo;
            }
          }
          array_unshift($arrays, $results);
          return permute($arrays);
        }
    
    0 讨论(0)
  • 2020-12-07 05:17

    That's a nice brain teasing question. Here's what I came up with, see the running demo for testing and adjusting.

    $multidimensional = array(
      0 => array(
        0 => 1,
        1 => 2,
        2 => 3,
      ),
      1 => array(
        0 => 5,
        1 => 6,
        2 => 7,
      ),
      2 => array(
        0 => 4,
        1 => 5,
      ),
    ); // just your input
    
    
    $permutations = array();
    $count = count($multidimensional);
    for ($i = 0; $i < $count; $i++) {
      $temp = array_map("permute",array($permutations),array($multidimensional[$i]));
      $permutations = $temp[0];
    }
    print_r($permutations); // OUTPUT
    
    function permute($base,$add) {
      $result = array();
      if (count($base) > 0) {
        foreach ($base AS $val1) {
          if (count($add) > 0) {
            foreach ($add AS $val2) {
              $result[] = $val1.$val2;
            }
          }
          else {
            $result = $base;
          }
        }
      }
      else {
        $result = $add;
      }
      return $result;
    }
    
    0 讨论(0)
提交回复
热议问题