最近學習了一下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;
}
實現了數組的升維和降維,也許實現方式不夠好,請批評指正!
