本文主要介绍了PHP实现数组的笛卡尔积运算,结合实例形式分析了php数组的笛卡尔积运算相关实现与使用技巧,需要的朋友可以参考下,希望能帮助到大家。

数组的笛卡尔积在实际中还是挺有用处的,比如计算商品的规格时就经常用到,下面写一种实现方式,如下代码

$arr = array(

array(2),

array(6,7),

array('a','b','c')

);

function dikaer($arr){

$arr1 = array();

$result = array_shift($arr);

while($arr2 = array_shift($arr)){

$arr1 = $result;

$result = array();

foreach($arr1 as $v){

foreach($arr2 as $v2){

if(!is_array($v))$v = array($v);

if(!is_array($v2))$v2 = array($v2);

$result[] = array_merge_recursive($v,$v2);

}

}

}

return $result;

}

以上例子输出的结果如下:

Array

(

[0] => Array

(

[0] => 2

[1] => 6

[2] => a

)

[1] => Array

(

[0] => 2

[1] => 6

[2] => b

)

[2] => Array

(

[0] => 2

[1] => 6

[2] => c

)

[3] => Array

(

[0] => 2

[1] => 7

[2] => a

)

[4] => Array

(

[0] => 2

[1] => 7

[2] => b

)

[5] => Array

(

[0] => 2

[1] => 7

[2] => c

)

)

如果需要输出字符串形式的结果可以把代码改成这样

function dikaer($arr){

$arr1 = array();

$result = array_shift($arr);

while($arr2 = array_shift($arr)){

$arr1 = $result;

$result = array();

foreach($arr1 as $v){

foreach($arr2 as $v2){

$result[] = $v.','.$v2;

}

}

}

return $result;

}

输出结果如下所示:Array

(

[0] => 2,6,a

[1] => 2,6,b

[2] => 2,6,c

[3] => 2,7,a

[4] => 2,7,b

[5] => 2,7,c

)

相关推荐:

笛卡尔积 php,详解PHP实现数组的笛卡尔积运算相关推荐

  1. 【Python】Numpy数组的切片、索引详解:取数组的特定行列

    [Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...

  2. java 判断数组已经存满_详解Java中数组判断元素存在几种方式比较

    1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...

  3. java 数组合并_拼接_详解Java合并数组的两种实现方式

    详解Java合并数组的两种实现方式 发布于 2020-7-27| 复制链接 摘记: 最近在写代码时遇到了需要合并两个数组的需求,突然发现以前没用过,于是研究了一下合并数组的方式,总结如下.1.Syst ...

  4. 详解多维数组与指针之间的关系

    一维数组 先介绍一下简单的一维数组: 列如: int a[3] = {0,1,2}; [3]和类型int则明确表示编译器应该为这个栈分配多大的内存,也就是三个int大小! 在内存中示意图是: 在CPU ...

  5. 【Python】详解Numpy中的点积运算

    1. 引言 根据数学家的说法,点积是一种运算,它取两个等长的向量作为输入,然后返回一个数字(标量).向量A与向量B的点积用符号表示为A•B.在线性代数中,点积是输入向量中每个对应元素的乘积之和. 本文 ...

  6. 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!

    一:题目 According to Wikipedia: "In mathematics and in particular in combinatorics, the Lehmer cod ...

  7. poj2217详解 ( 后缀数组 + 高度数组 )

    题目大概意思就是 给两个字符串,求最长公共字符串子串长度 我们可以考虑用后缀数组和高度数组 一个字符串 中 最长的两个相同字符串长度, 不就是 后缀数组中相邻两个后缀的最长公共前缀, 不就是 高度数组 ...

  8. java数组是行优先还是列优先的语言_详解C语言数组中是以列优先吗

    如果我们按照C语言的方式存储它,也就是行优先存储的话,那么在内存中,它的形状是这样的: 这种存储方式又被称作C contiguous array. C语言数组结构列优先顺序存储的实现 (GCC编译). ...

  9. 第19篇 基础(十九)详解QVector(数组)

    1.QVector数组介绍 数组我们都非常熟悉,数据在内存中是连续分布的.这种结构的缺点是当元素很多时,除了在结尾添加一个新元素以及修改某个元素值之外,其他相关的函数(如最开头插入)执行起来会随元素增 ...

最新文章

  1. 自动驾驶是汽车行业的未来 但这并不代表驾驶者能完全解放双手
  2. 关于页面元素在父容器里水平居中、垂直居中的问题
  3. 图解入侵过程,黑客未来!
  4. mysql之数据库主从复制配置报错1677
  5. CF-1207 F. Remainder Problem(分块)
  6. cygwin swoole_swoole入门--------基础概念
  7. Android之实现Room升级需要给一个表增加一个字段
  8. PMP_第4章章节试题
  9. oracle数据库左链接,Oracle数据库中的左连接与右连接
  10. java判断胡牌_怎么写一个c++程序判断麻将是否胡牌(只讨论清一色的情况)
  11. php接入阿里云OOS
  12. filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理
  13. 一家国营老化工厂的数字化三级跳|案例解析
  14. 无线通信sip服务器常用品牌,一种无线Mesh网中多SIP服务器布局方法
  15. Android 开发之Loading
  16. AJAX()请求参数
  17. 有关QSignalMapper的只言片语
  18. HTTP协议之无连接与无状态
  19. Photoshop-滤镜库的详细使用方法
  20. Open***-server配置文件参数详解(转)

热门文章

  1. 如何在阿里云申请免费的HTTPS证书
  2. 细说Linux虚拟化KVM-Qemu之virtio驱动
  3. 7-8 毕业聚会 (10分) java pta
  4. 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
  5. API流程和代码结构
  6. Unity 出现error CS0103: The name ‘AssetDatabase‘ does not exist in the current context
  7. SmartImageView的简单使用
  8. 前端框架Aurelia - Binding Radios
  9. Jmeter之JSON提取器说明示例
  10. Android 9.0及以上版本中,关于多进程问题对于WebView的影响