首页 > 编程语言 >PHP 2D数组输出所有组合

PHP 2D数组输出所有组合

时间:2022-10-27 11:02:36浏览次数:39  
标签:curr arrays res 2D values 数组 array PHP size


  我需要做同样的事情,并且尝试了此处发布的以前的解决方案,但无法使它们起作用。我从这个聪明的人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')
  );

  然后它将打印如下内容:

  惊人-好处-奇妙

  惊人-提议-奇妙

  惊人-奖赏-奇妙

  神奇-好处-惊人

  奇妙-提议-惊人

  奇妙-奖赏-惊人

标签:curr,arrays,res,2D,values,数组,array,PHP,size
From: https://blog.51cto.com/yetaotao/5800296

相关文章

  • 完全背包:数组组合,买书
    数字组合原题链接:https://www.acwing.com/problem/content/280/思路可以看出是一个完全背包,下面来分析完全背包dp状态表示集合:f[i][j]表示从前i个选,数字总和为j的方......
  • PHP – 在数组中分解值,输出到制表符分隔文件
    我在名为test_tab.txt的文件中有以下内容(制表符分隔):header1header2header3field1field1afield1b;field1cfield2field2afield2bfield3field3a......
  • PHP session数组输出(遍历输出)
    做购物车弄的下边是存储的sessionvar_dump的结果,我想遍历数组输出里边的信息,如编号名称价格等array(size=3)'C00000013'=>array(size=5)'id'=>string......
  • PHP 字符串分割数组并输出
    文章目录摘要1.1常见概念1.1.1机器学习本质1.1.2什么是神经网络1.1.3各种常见算法图示1.1.4计算图的导数计算1.1.5理解局部最优与全局最优1.1.6大数据与深度学习......
  • PHP :array_diff 用法(php计算数组的差集)
    说多了都是废话,直接上图:结果输出:由上图的结果可以看出:array_diff($a,$b)的结果只输出了5与8,则可以看出,输出的是$a的差集。array_diff($b,$a)......
  • AtCoder Beginner Contest 266 Ex Snuke Panic (2D)
    AtCoder传送门洛谷传送门考虑dp,\(f_i\)设在\(t_i\)时刻到达第\(i\)个点,能获得的最大收益。转移:\(f_i=f_j+a_i\),其中\(j\)能转移到\(i\)的充要条件有:\(......
  • CCCC L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 【树状数组】
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582895035215872题意给你一棵树,给定树根,要求树的所有结点编号的dfs序中逆序对的数量总和,对结果......
  • 解决PHPExcel科学计数法问题
     1.使用PhpSpreadsheet进行导入导出最简单正确直接的办法是使用正确的(方法)常见给单元格赋值方法:setCellValue是不行的解决办法:1.单元格值后接......
  • 每日算法4:去除数组中重复的元素,判断回文数/字符串
    去除数组中重复的元素题目描述:去除数组中重复的元素解题思路:因为对象中的键是唯一的,利用对象筛选数组中重复的部分,创建新数组存放不重复的元素因为对象中的键是唯一......
  • php代码审计
    反斜杠被过滤,利用cd回到根目录<?phperror_reporting(0);if(isset($_GET["cmd"])){if(preg_match('/et|echo|cat|tac|base|sh|more|less|tail|vi|head|nl|env|fl|\|......