我正在寻找最简洁的方法来获得一个对象的下一个孩子的兄弟姐妹(父母的下一个孩子)。
-- Parent Object
-- Child 1
-- Child 2 (<== Current object)
-- Child 3 (<== Required object)
-- Child 4
在这个例子中假设我们正在谈论页面(奏鸣曲页面)。目前我有第2页(孩子2),并且需要同一父母的下一页(在这种情况下是孩子3)。如果我有最后一页(孩子4),那么我需要第一个孩子。
一个选项是请求父级,然后请求所有子级,遍历所有子级并查找当前子级。然后带下一个孩子,或者第一个孩子,以防没有下一个孩子。但这似乎是很多代码,如果逻辑和循环有很多丑陋。所以我想知道是否有某种模式来解决这个问题。
答案 0 :(得分:0)
最终我想出了下一个解决方案:
/**
* $siblings is an array containing all pages with the same parent.
* So it also includes the current page.
* First check if there are siblings: Check if the parent has more then 1 child
**/
if (count($siblings) != 1) {
// Find the current page in the array
for ($i = 0; $i < count($siblings); $i++) {
// If we're not at the end of the array: Return next sibling
if ($siblings{$i}->getId() === $page->getId() && $i+1 != count($siblings)) {
return $siblings{$i+1};
}
// If we're at the end: Return first sibling
if ($siblings{$i}->getId() === $page->getId() && $i+1 == count($siblings)) {
return $siblings{0};
}
}
}
对于解决这个问题,这似乎是一个非常干净的解决方案。我们没有过多的循环,如果是逻辑,但代码仍然可读。