0
点赞
收藏
分享

微信扫一扫

PHP 2D数组输出所有组合


  我需要做同样的事情,并且尝试了此处发布的以前的解决方案,但无法使它们起作用。我从这个聪明的人http://www.php.net/manual/en/ref.array.php#54979中获得了一个样本。但是,他的样本没有处理没有重复组合的概念。所以我包括了那部分。这是我的修改版本,希望对您有所帮助:

$data = array(
  array('apples', 'pears', 'oranges'),
  array('steve', 'bob')
  );
  $res_matrix = $this->array_cartesian_product( $data );
  foreach ( $res_matrix as $res_array )
  {
  foreach ( $res_array as $res )
  {
  echo $res . " - ";
  }
  echo "
";  }function array_cartesian_product( $arrays ){
  $result = array();
  $arrays = array_values( $arrays );
  $sizeIn = sizeof( $arrays );
  $size = $sizeIn > 0 ? 1 : 0;
  foreach ($arrays as $array)
  $size = $size * sizeof( $array );
  $res_index = 0;
  for ( $i = 0; $i < $size; $i++ )
  {
  $is_duplicate = false;
  $curr_values = array();
  for ( $j = 0; $j < $sizeIn; $j++ )
  {
  $curr = current( $arrays[$j] );
  if ( !in_array( $curr, $curr_values ) )
  {
  array_push( $curr_values , $curr );
  }
  else
  {
  $is_duplicate = true;
  break;
  }
  }
  if ( !$is_duplicate )
  {
  $result[ $res_index ] = $curr_values;
  $res_index++;
  }
  for ( $j = ( $sizeIn -1 ); $j >= 0; $j-- )
  {
  $next = next( $arrays[ $j ] );
  if ( $next )
  {
  break;
  }
  elseif ( isset ( $arrays[ $j ] ) )
  {
  reset( $arrays[ $j ] );
  }
  }
  }
  return $result;}

  结果将是这样的:

  苹果-史蒂夫

  苹果-鲍勃

  梨-史蒂夫

  梨-鲍勃

  橘子-史蒂夫

  橘子-鲍勃

  如果您的数据数组是这样的:

$data = array(
  array('Amazing', 'Wonderful'),
  array('benefit', 'offer', 'reward'),
  array('Amazing', 'Wonderful')
  );

  然后它将打印如下内容:

  惊人-好处-奇妙

  惊人-提议-奇妙

  惊人-奖赏-奇妙

  神奇-好处-惊人

  奇妙-提议-惊人

  奇妙-奖赏-惊人

举报

相关推荐

0 条评论