笛卡尔积 php,详解PHP实现数组的笛卡尔积运算
本文主要介绍了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实现数组的笛卡尔积运算相关推荐
- 【Python】Numpy数组的切片、索引详解:取数组的特定行列
[Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...
- java 判断数组已经存满_详解Java中数组判断元素存在几种方式比较
1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...
- java 数组合并_拼接_详解Java合并数组的两种实现方式
详解Java合并数组的两种实现方式 发布于 2020-7-27| 复制链接 摘记: 最近在写代码时遇到了需要合并两个数组的需求,突然发现以前没用过,于是研究了一下合并数组的方式,总结如下.1.Syst ...
- 详解多维数组与指针之间的关系
一维数组 先介绍一下简单的一维数组: 列如: int a[3] = {0,1,2}; [3]和类型int则明确表示编译器应该为这个栈分配多大的内存,也就是三个int大小! 在内存中示意图是: 在CPU ...
- 【Python】详解Numpy中的点积运算
1. 引言 根据数学家的说法,点积是一种运算,它取两个等长的向量作为输入,然后返回一个数字(标量).向量A与向量B的点积用符号表示为A•B.在线性代数中,点积是输入向量中每个对应元素的乘积之和. 本文 ...
- 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
一:题目 According to Wikipedia: "In mathematics and in particular in combinatorics, the Lehmer cod ...
- poj2217详解 ( 后缀数组 + 高度数组 )
题目大概意思就是 给两个字符串,求最长公共字符串子串长度 我们可以考虑用后缀数组和高度数组 一个字符串 中 最长的两个相同字符串长度, 不就是 后缀数组中相邻两个后缀的最长公共前缀, 不就是 高度数组 ...
- java数组是行优先还是列优先的语言_详解C语言数组中是以列优先吗
如果我们按照C语言的方式存储它,也就是行优先存储的话,那么在内存中,它的形状是这样的: 这种存储方式又被称作C contiguous array. C语言数组结构列优先顺序存储的实现 (GCC编译). ...
- 第19篇 基础(十九)详解QVector(数组)
1.QVector数组介绍 数组我们都非常熟悉,数据在内存中是连续分布的.这种结构的缺点是当元素很多时,除了在结尾添加一个新元素以及修改某个元素值之外,其他相关的函数(如最开头插入)执行起来会随元素增 ...
最新文章
- 自动驾驶是汽车行业的未来 但这并不代表驾驶者能完全解放双手
- 关于页面元素在父容器里水平居中、垂直居中的问题
- 图解入侵过程,黑客未来!
- mysql之数据库主从复制配置报错1677
- CF-1207 F. Remainder Problem(分块)
- cygwin swoole_swoole入门--------基础概念
- Android之实现Room升级需要给一个表增加一个字段
- PMP_第4章章节试题
- oracle数据库左链接,Oracle数据库中的左连接与右连接
- java判断胡牌_怎么写一个c++程序判断麻将是否胡牌(只讨论清一色的情况)
- php接入阿里云OOS
- filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理
- 一家国营老化工厂的数字化三级跳|案例解析
- 无线通信sip服务器常用品牌,一种无线Mesh网中多SIP服务器布局方法
- Android 开发之Loading
- AJAX()请求参数
- 有关QSignalMapper的只言片语
- HTTP协议之无连接与无状态
- Photoshop-滤镜库的详细使用方法
- Open***-server配置文件参数详解(转)
热门文章
- 如何在阿里云申请免费的HTTPS证书
- 细说Linux虚拟化KVM-Qemu之virtio驱动
- 7-8 毕业聚会 (10分) java pta
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- API流程和代码结构
- Unity 出现error CS0103: The name ‘AssetDatabase‘ does not exist in the current context
- SmartImageView的简单使用
- 前端框架Aurelia - Binding Radios
- Jmeter之JSON提取器说明示例
- Android 9.0及以上版本中,关于多进程问题对于WebView的影响