<?PHP
/**
* 把二维表分解成多级数组
* (可用于无线分级菜单,无限级留言)
* @author Lonely (从以前BLOG转过来的)
*/
class unlimitClass {
private static $proarr=array();
private static $valuefield='value';
private static $parentidfield='parentid';
private static $subidfield='subid';
/**
* 设置父字段
* @param string $parentid
*/
public static function setParentIdField($parentid){
self::$parentidfield=$parentid;
}
/**
* 设置子字段
* @param string $subid
*/
public static function setSubIdField($subid){
self::$subidfield=$subid;
}
/**
* 设置值字段
* @param string $value
*/
public static function setValueField($value){
self::$valuefield=$value;
}
/**
* 处理分级数组并返回
* @param array $array
*/
public static function toSub(array $array){
if(is_array($array)){
foreach($array as $row){
self::$proarr [$row [self::$subidfield]] = $row;
self::$proarr [$row [self::$parentidfield]] ['sub'] [$row [self::$subidfield]] = $row;
}
return self::search_sub(self::$proarr,0);
}else
return array();
}
/**
* 关键算法函数
* @param array $array
* @param unknown_type $key
*/
private static function search_sub(array $array,$key){
$return = array ();
$subs = isset ( $array [$key] ['sub'] ) ? $array [$key] ['sub'] : array ();
foreach ( $subs as $k => $v ) {
$return [$k] = array ('sub' => self::search_sub ( $array, $k ), 'value' => $v [self::$valuefield] );
}
return $return;
}
}
$temp=array (
0 =>
array (
'a' => '0',
'b' => '1',
'c' => 'a1',
),
1 =>
array (
'a' => '0',
'b' => '2',
'c' => 'a2',
),
2 =>
array (
'a' => '1',
'b' => '3',
'c' => 'a3',
),
3 =>
array (
'a' => '1',
'b' => '4',
'c' => 'a4',
),
4 =>
array (
'a' => '3',
'b' => '5',
'c' => 'a5',
),
5 =>
array (
'a' => '3',
'b' => '6',
'c' => 'a6',
),
6 =>
array (
'a' => '5',
'b' => '7',
'c' => 'a7',
),
7 =>
array (
'a' => '5',
'b' => '8',
'c' => 'a8',
),
8 =>
array (
'a' => '5',
'b' => '9',
'c' => 'a9',
),
9 =>
array (
'a' => '6',
'b' => '10',
'c' => 'a10',
),
10 =>
array (
'a' => '6',
'b' => '11',
'c' => 'a11',
),
11 =>
array (
'a' => '4',
'b' => '12',
'c' => 'a12',
),
12 =>
array (
'a' => '4',
'b' => '13',
'c' => 'a13',
),
13 =>
array (
'a' => '12',
'b' => '14',
'c' => 'a14',
),
14 =>
array (
'a' => '12',
'b' => '15',
'c' => 'a15',
),
15 =>
array (
'a' => '12',
'b' => '16',
'c' => 'a16',
),
16 =>
array (
'a' => '13',
'b' => '17',
'c' => 'a17',
),
17 =>
array (
'a' => '13',
'b' => '18',
'c' => 'a18',
),
18 =>
array (
'a' => '2',
'b' => '19',
'c' => 'a19',
),
19 =>
array (
'a' => '2',
'b' => '20',
'c' => 'a20',
),
20 =>
array (
'a' => '2',
'b' => '21',
'c' => 'a21',
),
21 =>
array (
'a' => '19',
'b' => '22',
'c' => 'a22',
),
22 =>
array (
'a' => '19',
'b' => '23',
'c' => 'a23',
),
23 =>
array (
'a' => '19',
'b' => '24',
'c' => 'a24',
),
24 =>
array (
'a' => '20',
'b' => '25',
'c' => 'a25',
),
25 =>
array (
'a' => '20',
'b' => '26',
'c' => 'a26',
),
26 =>
array (
'a' => '20',
'b' => '27',
'c' => 'a27',
),
27 =>
array (
'a' => '20',
'b' => '28',
'c' => 'a28',
),
28 =>
array (
'a' => '21',
'b' => '29',
'c' => 'a29',
),
29 =>
array (
'a' => '21',
'b' => '30',
'c' => 'a30',
),
30 =>
array (
'a' => '21',
'b' => '31',
'c' => 'a31',
),
31 =>
array (
'a' => '21',
'b' => '32',
'c' => 'a32',
),
);
unlimitClass::setParentIdField('a');
unlimitClass::setSubIdField('b');
unlimitClass::setValueField('c');
$subs=unlimitClass::toSub($temp);
var_export($subs);
最新评论