php函数在php中不返回数组
我创建了一个函数,如下所示:php函数在php中不返回数组,php,Php,我创建了一个函数,如下所示: <?php $cat_id=2; $ids=array(); $ids[]=2; var_dump(fetchParents($cat_id,$ids)); function fetchParents($cat_id,$ids){ $db=mysql_connect("localhost","root","") or die("could not connect to database"); mysql_select_db("symfony",
<?php
$cat_id=2;
$ids=array();
$ids[]=2;
var_dump(fetchParents($cat_id,$ids));
function fetchParents($cat_id,$ids){
$db=mysql_connect("localhost","root","") or die("could not connect to database");
mysql_select_db("symfony",$db) or die("could not connect to symfony database");
$query="SELECT parent_id FROM categories WHERE id='$cat_id'";
$result=mysql_query($query,$db);
if (mysql_num_rows($result)==1) {
$cat=mysql_fetch_array($result);
if (isset($cat['parent_id'])) {
$ids[]=$cat['parent_id'];
fetchParents($cat['parent_id'],$ids);
}
else {
var_dump($ids);
return $ids;
}
}
else {
return $ids;
}
}
?>
有一个控制流在退出函数之前不执行返回
语句。你需要改变
fetchParents($cat['parent_id'],$ids);
到
否则,在该行之后,函数将退出而不返回
添加:
要转换为循环,请执行以下操作:
function fetchParents($childId)
{
$ids = array();
$db=mysql_connect("localhost","root","") or die("could not connect to database");
mysql_select_db("symfony",$db) or die("could not connect to symfony database");
while (true)
{
$res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
$row = mysql_fetch_assoc($res);
if (is_null($row['parent_id']) )
return $ids;
$ids[] = $row['parent_id'];
$childId = $row['parent_id'];
}
}
顺便说一句,我看到在最初的示例中,您也将起始元素的ID添加到数组中。如果是这样,那么它可以变得更加优雅:
function fetchParents($childId)
{
$ids = array();
$db=mysql_connect("localhost","root","") or die("could not connect to database");
mysql_select_db("symfony",$db) or die("could not connect to symfony database");
while (!is_null($childId))
{
$ids[] = $childId;
$res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
$row = mysql_fetch_assoc($res);
$childId = $row['parent_id'];
}
return $ids;
}
请注意,当SELECT
查询不返回任何行时,这两种方法都不会处理这种情况。我假设这是不会发生的,因为您是通过ID进行选择的。然而,如果这是一种可能性,那么您还需要检查$row===false
,否则您将收到大量警告/错误消息(不确定PHP在这种情况下会做什么)。有一个控制流在退出函数之前不执行return
语句。你需要改变
fetchParents($cat['parent_id'],$ids);
到
否则,在该行之后,函数将退出而不返回
添加:
要转换为循环,请执行以下操作:
function fetchParents($childId)
{
$ids = array();
$db=mysql_connect("localhost","root","") or die("could not connect to database");
mysql_select_db("symfony",$db) or die("could not connect to symfony database");
while (true)
{
$res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
$row = mysql_fetch_assoc($res);
if (is_null($row['parent_id']) )
return $ids;
$ids[] = $row['parent_id'];
$childId = $row['parent_id'];
}
}
顺便说一句,我看到在最初的示例中,您也将起始元素的ID添加到数组中。如果是这样,那么它可以变得更加优雅:
function fetchParents($childId)
{
$ids = array();
$db=mysql_connect("localhost","root","") or die("could not connect to database");
mysql_select_db("symfony",$db) or die("could not connect to symfony database");
while (!is_null($childId))
{
$ids[] = $childId;
$res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
$row = mysql_fetch_assoc($res);
$childId = $row['parent_id'];
}
return $ids;
}
请注意,当SELECT
查询不返回任何行时,这两种方法都不会处理这种情况。我假设这是不会发生的,因为您是通过ID进行选择的。然而,如果这是一种可能性,那么您还需要检查$row===false
,否则您将收到大量警告/错误消息(不确定PHP在这种情况下会做什么).如果前两个If为true,则函数不返回任何内容。如果前两个If为true,则函数不返回任何内容。您可能需要为输入$ids
和输出$ids
使用不同的名称,这可以重写为一个简单的循环-无需涉及代价高昂的递归。您可能需要为输入$ids
和输出$ids
使用不同的名称。此外,这可以重写为一个简单的循环-无需涉及代价高昂的递归。@PradipChitrakar-将其重写为一个循环。它会简单得多,因此更难搞砸。如何使用循环实现这一点?任何暗示。我要把一个孩子的父母都找来child@PradipChitrakar-我编辑了这篇文章,看看吧。想法很简单,就是在每次迭代结束时,将$childId
设置为$row['parent\u id']
,然后重新开始。@PradipChitrakar-将其重写为循环。它会简单得多,因此更难搞砸。如何使用循环实现这一点?任何暗示。我要把一个孩子的父母都找来child@PradipChitrakar-我编辑了这篇文章,看看吧。想法很简单,在每次迭代结束时,您将$childId
设置为$row['parent\u id']
,然后重新开始。