php數組的升維和降維處理


最近學習了一下php數組的升維和降維,廢話少說,上Demo。

//假設有數組降維前,如下
$array = array(
	'a' => array(
		'b' => 1,
		'c' => array(
			'd' => 2,
			'e' => 3
		)
	),
	'f' => 4,
	'g' => array(
		'h'=>5		
	)
	
);

  降維后,如下:

//降維后
$array = array(
    '0' => a->b->1,
    '1' => a->c->d->2,
    '2' => a->c->e->3,
    '3' => f->4,
    '4' => g->h->5
);

  實現的function如下:

/**
 * 將多維數組降維成一維數組,遞歸實現
 * @param unknown $arr
 * @param string $delimiter
 * @param string $key
 * @return boolean|Ambigous <multitype:string , multitype:>
 */
function multiToSingle($arr, $delimiter = '->',$key = ' ') {
	$resultAry = array();
	if (!(is_array($arr) && count($arr)>0)) {
		return false;
	}
	foreach ($arr AS $k=>$val) {
		$newKey = trim($key . $k . $delimiter);
		if (is_array($val) && count($val)>0) {
			$resultAry = array_merge($resultAry, multiToSingle($val, $delimiter, $newKey));
		} else {
			$resultAry[] = $newKey . $val;
		}
	}
	return $resultAry;
}

  數組有降必有升,升維來了:

/**
 * 將一維數組升維成多維數組
 * 
 * @param unknown $arr        	
 * @param string $delimiter        	
 * @return multitype:
 */
function singleToMulti($arr, $delimiter = '->') {
	if (! (is_array ( $arr ) && count ( $arr ) > 0)) {
		return false;
	}
	$endAry = array ();
	foreach ( $arr as $key => $val ) {
		$sAry = explode ( $delimiter, $val );
		$len = count ( $sAry );
		$ary = array ();
		for($i = $len - 2; $i > - 1; $i --) {
			if ($i == $len - 2) {
				$ary [$sAry [$i]] = $sAry [$i + 1];
			} else {
				$ary = array (
						$sAry [$i] => $ary 
				);
			}
		}
		$endAry = array_merge_recursive ( $endAry, $ary );
	}
	return $endAry;
}

  

  實現了數組的升維和降維,也許實現方式不夠好,請批評指正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM