浏览 5674 次
锁定老帖子 主题:java代码转PHP代码,高手进
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-22
最后修改:2011-11-22
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayAssemble { @SuppressWarnings("unchecked") public static void main(String[] args) { String[] arrOfInt = { "红", "橙", "黄","黑" }; @SuppressWarnings("unused") String[] arrOfChar1 = { "L", "XL" }; @SuppressWarnings("unused") String[] arrOfChar2 = { "麻", "晴纶","看" }; String[] arrOfChar3 = { "奎", "康" }; String[] arrOfStr = { "lmy", "lyb", "mz", "yx" }; System.out.println("以下是组合后的数组"); // Object[][] objectsArrays = assembleArraysToPlanerArray(new Object[][] {arrOfInt, arrOfChar1, arrOfChar2, arrOfChar3,arrOfStr }); Object[][] objectsArrays = assembleArraysToPlanerArray(new Object[][] { arrOfChar1,arrOfChar2, arrOfChar3 }); // Object[][] objectsArrays = assembleArraysToPlanerArray(new Object[][] { arrOfChar1,arrOfChar2 }); int i = 0; for (Object[] objArrays : objectsArrays) { i++; System.out.println(i + "=" + Arrays.toString(objArrays)); } } // 方法一的辅助方法:将一个数组类型或对象类型的List与数组组合,并返回List @SuppressWarnings("unchecked") public static List assembleArrayToList(List aList, Object[] array) { List arrList = new ArrayList(); // 遍历aList,将array与aList进行组合 for (int i = 0; i < aList.size(); i++) { Object obj = aList.get(i); // 检查aList的元素是否是数组类型的,如果不是,则直接产生组合列表 if (obj instanceof Object[]) { Object[] listArr = (Object[]) obj; // 对数组类型的aList元素与array进行组合 for (int k = 0; k < array.length; k++) { Object[] newListArr = new Object[listArr.length + 1]; for (int j = 0; j < listArr.length; j++) { newListArr[j] = listArr[j]; } newListArr[listArr.length] = array[k]; arrList.add(newListArr); } } else { // 对非数组类型的aList元素与array进行组合 for (int j = 0; j < array.length; j++) { Object[] arrObj = { aList.get(i), array[j] }; arrList.add(arrObj); } } } return arrList; } // 方法二:使用二维数组参数方法返回组合的二维数组类型,并使用了递归 @SuppressWarnings("unchecked") public static Object[][] assembleArraysToPlanerArray(Object[][] objectArrays) { if (objectArrays.length == 2) { Object[] assembledArray = objectArrays[0]; Object[] array = objectArrays[1]; return assembleArrayToArray(assembledArray, array); } else if (objectArrays.length <= 1) { return objectArrays; } else { Object[] objArray = objectArrays[objectArrays.length - 1]; objectArrays = Arrays.copyOf(objectArrays, objectArrays.length - 1); return assembleArrayToArray(assembleArraysToPlanerArray(objectArrays), objArray); } } // 方法二的辅助方法:将一个数组类型或二维数组类型与数组组合,并返回二维数组 public static Object[][] assembleArrayToArray(Object[] assembledArray,Object[] array) { int lenAssArray = assembledArray.length; int lenArray = array.length; Object[][] objArrays = new Object[lenAssArray * lenArray][]; for (int i = 0; i < lenAssArray; i++) { Object obj = assembledArray[i]; if (obj instanceof Object[]) { Object[] objArr = (Object[]) obj; int lenObjArr = objArr.length; for (int k = 0; k < lenArray; k++) { // 复制objArr数组到newListArr数组,并将其长度加一 Object[] newListArr = Arrays.copyOf(objArr, lenObjArr + 1); // 将array数组的第k+1元素赋值给newListArr数组最后的元素,并将newListArr赋值给objArrays数组的第k+1个元素 newListArr[lenObjArr] = array[k]; objArrays[lenArray * i + k] = newListArr; } } else { for (int j = 0; j < lenArray; j++) { Object[] newObjArray = { obj, array[j] }; objArrays[lenArray * i + j] = newObjArray; } } } return objArrays; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-24
<?php /** * 计算数组合并结果,参数必须都是数组,个数不限 * * @return array */ function foo() { $numargs = func_get_args(); $count = count($numargs); if ($count < 2) //如果参数个数小于2,则忽略 return null; $result = $numargs[0]; for($i=0; $i < $count-1; $i++) { $result = merge($result, $numargs[$i+1]); } return $result; } /** * 该函数返回混合后的二维数组,不管原先是几维,返回一定是二维。 * 类似 * array( * array(1,4,2), * array(11,45,266), * array(133,44,42), * ) * * @param array $arr1 * @param array $arr2 * @return array */ function merge(array $arr1, array $arr2) { $new = array(); foreach ($arr1 as $key => $value) { $temp = (array)$value; foreach ($arr2 as $key2 => $value2) { $temp2 = array_merge($temp, (array)$value2); $new[] = $temp2; } } return $new; } $arr1 = array("L", "XL"); $arr2 = array("麻", " 晴纶","看"); $arr3 = array("奎", " 康"); echo var_export(foo($arr1, $arr2, $arr3), 1); //array ( // 0 => // array ( // 0 => 'L', // 1 => '麻', // 2 => '奎', // ), // 1 => // array ( // 0 => 'L', // 1 => '麻', // 2 => ' 康', // ), // 2 => // array ( // 0 => 'L', // 1 => ' 晴纶', // 2 => '奎', // ), // 3 => // array ( // 0 => 'L', // 1 => ' 晴纶', // 2 => ' 康', // ), // 4 => // array ( // 0 => 'L', // 1 => '看', // 2 => '奎', // ), // 5 => // array ( // 0 => 'L', // 1 => '看', // 2 => ' 康', // ), // 6 => // array ( // 0 => 'XL', // 1 => '麻', // 2 => '奎', // ), // 7 => // array ( // 0 => 'XL', // 1 => '麻', // 2 => ' 康', // ), // 8 => // array ( // 0 => 'XL', // 1 => ' 晴纶', // 2 => '奎', // ), // 9 => // array ( // 0 => 'XL', // 1 => ' 晴纶', // 2 => ' 康', // ), // 10 => // array ( // 0 => 'XL', // 1 => '看', // 2 => '奎', // ), // 11 => // array ( // 0 => 'XL', // 1 => '看', // 2 => ' 康', // ), //) |
|
返回顶楼 | |
发表时间:2011-12-09
最后修改:2011-12-09
跟java比php精简到... 无语了~
|
|
返回顶楼 | |
发表时间:2011-12-10
happysoul 写道 跟java比php精简到... 无语了~
精简的JAVA代码, 不比PHP多 public static Object[][] assembleArraysToPlanerArray(Object[][] p) { int n = 1; for(int i=0; i<p.length; i++) n *= p[i].length; Object[][] rr = new Object[n][]; int[] m = new int[p.length]; for(int i=0; i<n; i++) { rr[i] = new Object[m.length]; for(int j = 0; j< m.length; j++) rr[i][j] = p[j][m[j]]; for(int j = m.length - 1; j >= 0; j--) { if(m[j] < p[j].length - 1) { m[j] ++; break; } else m[j] = 0; } } return rr; } |
|
返回顶楼 | |
发表时间:2011-12-10
happysoul 写道 跟java比php精简到... 无语了~
看仔细了再说,那段JAVA代码提供了两种方法哦,亲 |
|
返回顶楼 | |
发表时间:2011-12-11
php 的简单 快捷 秒杀 java~~~ |
|
返回顶楼 | |
发表时间:2011-12-13
最后修改:2011-12-13
拜月小刀 写道 php 的简单 快捷 秒杀 java~~~ |
|
返回顶楼 | |
发表时间:2011-12-14
拜月小刀 写道 php 的简单 快捷 秒杀 java~~~ |
|
返回顶楼 | |