这是我正在使用的课程:
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**?**的中间提取数据时如何显示数据。
发布于 2012-10-16 04:24:55
我自己解决的..。在这里发布解决方案,以防将来有人想要使用该解决方案:
初始化类时,我需要传递当前的父id,然后它将全部设置为去。
$recurdata = RecursiveCategoryIterator::createFromResult($result,$current_parent_id);然后在递归类中,添加以下内容作为回报:
public static function createFromResult($result,$root_id) {
//$this->root_id=$current_cat_id;
$menu_array = array();
while($row = mysql_fetch_assoc($result)) {
$menu_array[$row[self::PARENT_FIELD]][] = $row;
}
return new self($menu_array,$root_id);
}看到$root_id正在这里传递。然后,它会像魅力一样工作:)
希望这对将来的人有帮助:)
https://stackoverflow.com/questions/12898337
复制相似问题