<?php
final class Data
{
static public function channel($data, $fieldPri = 'cid', $fieldPid = 'pid', $pid = 0, $sid = null, $type = 2, $html = " ", $level = 1)
{
switch ($type) {
case 1:
return self::channelLevel($data, $pid, $html, $fieldPri, $fieldPid, $level);
case 2:
return self::channelList($data, $pid, $html, $fieldPri, $fieldPid, $level);
case 3:
return self::parentChannel($data, $sid, $html, $fieldPri, $fieldPid, $level);
case 4:
return self::isChild($data, $sid, $pid, $fieldPri, $fieldPid);
}
}
static public function channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
{
if (!$data) {
return array();
}
$arr = array();
$id = 0;
foreach ($data as $v) {
if ($v[$fieldPid] == $pid) {
$arr[$id] = $v;
$arr[$id]['level'] = $level;
$arr[$id]['html'] = str_repeat($html, $level - 1);
$sArr = self::channelList($data, $v[$fieldPri], $html, $fieldPri, $fieldPid, $level + 1);
$arr = array_merge($arr, $sArr);
$id = count($arr);
}
}
return $arr;
}
static public function channelLevel($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
{
if (!$data) {
return array();
}
$arr = array();
foreach ($data as $v) {
if ($v[$fieldPid] == $pid) {
$arr[$v[$fieldPri]] = $v;
$arr[$v[$fieldPri]]['html'] = str_repeat($html, $level - 1);
$arr[$v[$fieldPri]]["Data"] = self::channelLevel($data, $v[$fieldPri], $html, $fieldPri, $fieldPid, $level + 1);
}
}
return $arr;
}
static public function parentChannel($data, $sid, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid')
{
if (!$data) {
return array();
}
static $arr = array();
foreach ($data as $v) {
if ($v[$fieldPri] == $sid) {
$arr[] = $v;
$sArr = self::parentChannel($data, $v[$fieldPid], $html, $fieldPri, $fieldPid);
$arr = array_merge($arr, $sArr);
}
}
return $arr;
}
static function isChild($data, $sid, $pid, $fieldPri = 'cid', $fieldPid = 'pid')
{
$_data = self::channelList($data, $pid, "", $fieldPri, $fieldPid);
foreach ($_data as $c) {
if ($c['cid'] == $sid) return true;
}
return false;
}
static function descarte($arr, $tmp = array())
{
static $n_arr = array();
foreach (array_shift($arr) as $v) {
$tmp[] = $v;
if ($arr) {
self::descarte($arr, $tmp);
} else {
$n_arr[] = $tmp;
}
array_pop($tmp);
}
return $n_arr;
}
}
?>