论坛首页 编程语言技术论坛

java代码转PHP代码,高手进

浏览 5674 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-11-22   最后修改:2011-11-22
PHP
高手们,请帮忙把下面的代码转换为PHP代码,谢谢
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;
	}

}

   发表时间: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 => ' 康',
//  ),
//)


0 请登录后投票
   发表时间:2011-12-09   最后修改:2011-12-09
跟java比php精简到... 无语了~
0 请登录后投票
   发表时间: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;
    }

0 请登录后投票
   发表时间:2011-12-10  
happysoul 写道
跟java比php精简到... 无语了~

看仔细了再说,那段JAVA代码提供了两种方法哦,亲
0 请登录后投票
   发表时间:2011-12-11  

php 的简单 快捷 秒杀 java~~~
0 请登录后投票
   发表时间:2011-12-13   最后修改:2011-12-13
拜月小刀 写道

php 的简单 快捷 秒杀 java~~~


0 请登录后投票
   发表时间:2011-12-14  
拜月小刀 写道

php 的简单 快捷 秒杀 java~~~

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics