这是我正在使用的课程:
class RecursiveCategoryIterator implements RecursiveIterator {
const ID_FIELD = 'cat_ID';
const PARENT_FIELD = 'parent';
private $_data;
private $_root;
private $_position = 0;
public function __construct(array $data, $root_id='0') {
$this->_data = $data;
$this->_root = $root_id;
}
public function valid() {
return isset($this->_data[$this->_root][$this->_position]);
}
public function hasChildren() {
$subid = $this->_data[$this->_root][$this->_position][self::ID_FIELD];
return isset($this->_data[$subid])
&& is_array($this->_data[$subid]);
}
public function next() {
$this->_position++;
}
public function current() {
return $this->_data[$this->_root][$this->_position];
}
public function getChildren() {
return new self($this->_data,
$this->_data[$this->_root][$this->_position][self::ID_FIELD]);
}
public function rewind() {
$this->_position = 0;
}
public function key() {
return $this->_position;
}
public static function createFromResult($result) {
$menu_array = array();
while($row = mysql_fetch_assoc($result)) {
$menu_array[$row[self::PARENT_FIELD]][] = $row;
}
return new self($menu_array);
}
}
当我获取根类别时它工作得很好..意味着当第一个字段parent
是zero
..但是如果我在树之间获取类别..那么它会失败..因为它只有在第一个数组为零时才有效..
例如这个数组:
RecursiveCategoryIterator Object
(
[_data:RecursiveCategoryIterator:private] => Array
(
[1] => Array
(
[0] => Array
(
[cat_ID] => 27
[cat_name] => Local Guess Papers
[cat_nicename] => local-guess-paper
[parent] => 1
[post_count] => 5
[depth] => 0
)
)
[27] => Array
(
[0] => Array
(
[cat_ID] => 28
[cat_name] => Class IX
[cat_nicename] => class-9
[parent] => 27
[post_count] => 0
[depth] => 1
)
[1] => Array
(
[cat_ID] => 34
[cat_name] => Class X
[cat_nicename] => class-10
[parent] => 27
[post_count] => 0
[depth] => 1
)
[2] => Array
(
[cat_ID] => 40
[cat_name] => Class XI
[cat_nicename] => class-11
[parent] => 27
[post_count] => 0
[depth] => 1
)
[3] => Array
(
[cat_ID] => 46
[cat_name] => Class XII
[cat_nicename] => class-12
[parent] => 27
[post_count] => 0
[depth] => 1
)
)
[28] => Array
(
[0] => Array
(
[cat_ID] => 29
[cat_name] => Year 2010
[cat_nicename] => year-2010
[parent] => 28
[post_count] => 0
[depth] => 2
)
[1] => Array
(
[cat_ID] => 30
[cat_name] => Year 2007
[cat_nicename] => year-2007-guess
[parent] => 28
[post_count] => 4
[depth] => 2
)
[2] => Array
(
[cat_ID] => 31
[cat_name] => Year 2008
[cat_nicename] => year-2008-guess
[parent] => 28
[post_count] => 4
[depth] => 2
)
[3] => Array
(
[cat_ID] => 32
[cat_name] => Year 2009
[cat_nicename] => year-2009-guess
[parent] => 28
[post_count] => 2
[depth] => 2
)
[4] => Array
(
[cat_ID] => 33
[cat_name] => Year 2006
[cat_nicename] => year-2006-cbse-guess-paper
[parent] => 28
[post_count] => 3
[depth] => 2
)
)
)
[_root:RecursiveCategoryIterator:private] => 0
[_position:RecursiveCategoryIterator:private] => 0
)
没有返回任何东西,因为first element is NOT zero
这是我可以使用此类的功能:
$sql='some sql to retrive data';
$result = mysql_query($sql);
$recurdata = RecursiveCategoryIterator::createFromResult($result);
makecat($recurdata,'','');
function makecat($iterator, $parent_name,$category) {
foreach($iterator as $row) {
echo(''.$row['cat_name'].'');
if($iterator->hasChildren()) {
makecat($iterator->getChildren(), $row['cat_name'],$category);
}
}
}
所以我想知道从树中间获取数据时如何显示数据when first parent is not the zero
?