Php foreach循环的帮助
希望去掉depth--1字段,只显示名称及其值 函数文件Php foreach循环的帮助,php,Php,希望去掉depth--1字段,只显示名称及其值 函数文件 <?php public function getLocalSubNodes($node_name){ $stmt = conn::getInstance()->prepare(" SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth FROM categories AS node, categories AS p
<?php
public function getLocalSubNodes($node_name){
$stmt = conn::getInstance()->prepare(" SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth FROM categories AS node, categories AS parent, categories AS sub_parent,
(
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM categories AS node,
categories AS parent
WHERE node.left_node BETWEEN parent.left_node AND parent.right_node
AND node.name = :node_name
GROUP BY node.name
ORDER BY node.left_node
)AS sub_tree
WHERE node.left_node BETWEEN parent.left_node AND parent.right_node
AND node.left_node BETWEEN sub_parent.left_node AND sub_parent.right_node
AND sub_parent.name = sub_tree.name
GROUP BY node.name
HAVING depth <= 1
ORDER BY node.left_node");
$stmt->bindParam(':node_name', $node_name, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetchALL(PDO::FETCH_ASSOC);
}
?>
I instantiate the class calling the getLocalSubNodes functions
<?php
$hierachy = new hierachy;
$iterator = new RecursiveIteratorIterator(new recursiveArrayIterator($hierachy->getLocalSubNodes($name1)));
try {
foreach($iterator as $key=>$value)
{
echo $key.' -- '.$value.'<br />';
}
}
catch(Exception $e)
{
echo $e->getMessage();
} ?>
我实例化了调用getLocalSubNodes函数的类
导致
名称--mp3播放器
深度——1
名称--cd播放机
深度——1
名称--双向无线电
深度——1
我只想要
名称--mp3播放器
名称--cd播放机
名称--双向无线电
想要摆脱深度
在数据库中,我没有一个名为depth的字段,它似乎是在上面的查询中生成的,我需要查询来计算深度,但我不想打印深度及其值,不需要打印或回显深度及其值
所以我认为这可能是每个循环的最佳结果
但不确定这是否是问题所在
谢谢。一个简单的修复方法是在显示器中添加if语句
foreach($iterator as $key=>$value)
{
if ($key <> "depth")
echo $key.' -- '.$value.'<br />';
}
foreach($iterator as$key=>$value)
{
如果($key“depth”)
回显$key.'-'.$value.
;
}
您在这里的查询中选择它:
SELECT node.name, (COUNT(parent.name) - 1) AS depth
因此,在foreach中,您需要检查想要的密钥,或者检查不想要的密钥
foreach($iterator as $key=>$value)
{
if ($key != 'name') {
continue;
}
echo $key.' -- '.$value.'<br />';
}
foreach($iterator as$key=>$value)
{
如果($key!=“name”){
持续
}
回显$key.'-'.$value.
;
}
是后者的一个例子
如果您想要所有的但深度,请执行以下操作:
foreach($iterator as $key=>$value)
{
if ($key == 'depth') {
continue;
}
echo $key.' -- '.$value.'<br />';
}
foreach($iterator as$key=>$value)
{
如果($key=='depth'){
持续
}
回显$key.'-'.$value.
;
}
请正确设置代码格式。这不是一个论坛,所以[code]
标签完全不起作用。请点击code
和quote
按钮。请正确缩进并标记您的代码,它完全不可读。谁告诉您的?下面看第三个:编辑:很明显,费拉罗先生删除了他的评论,使这一个看起来很混乱。我不想显示深度,我仍然希望查询完成它的工作,但不要显示其中的深度。我会测试it@Cthos:是的,您的回答是正确的!=,谢谢你纠正我。到目前为止,ferrero little condition去掉了字段深度的$key和$value。@fello2:是的,他的基本上与我给出的第二个选项相同,只是我使用了一个continue
跳到循环的下一个迭代,只是因为我觉得它看起来更干净了一点。在计算上,它们的处理速度也应该差不多。所以这取决于你的喜好。我也反对在if语句中不使用大括号。所以意思是不使用深度,这将是一个伟大的发布人,这个小傻瓜深度占用了我两天的时间,我已经尝试修复了一段时间,谢谢泰勒和!=两者都表示“不相等”。我不知道这家伙是从哪里得到他的信息的不存在,但是如果你想参考所有的运营商,那么就来吧:谢谢费雷罗,你在条件方面做得很好,它不仅去掉了深度字段的$key值,而且在本例中也去掉了该值。请不要忘记单击解决此问题的任何答案旁边的绿色复选标记,以便其他用户知道哪个解决方案有效。