PHP - 把一个mysql数组的结果变成一个局部变量数组?
问题描述:
我有以下代码:PHP - 把一个mysql数组的结果变成一个局部变量数组?
$catsQuery = "
SELECT id, category
FROM categories
ORDER BY category
";
$catsSql = mysqli_query($link, $catsQuery);
$cats = array();
mysqli_data_seek($catsSql, 0);
while($rowCats = mysqli_fetch_assoc($catsSql))
{
$cats[$rowCats['id']]['catName'] = $rowCats['category'];
}
foreach ($cats as $catKey => $cat['$catName'])
{
$pageContent .= "<p>$catKey | $catName</p>
";
}
两列id
和category
包含这样的数据:
- ID |类别
- 1 |鞋子
- 2 |衬衫
- 3 |帽子
我想什么做的是把该表中的所有categories
行到名为cats
在while循环中的局部数组作为各行阵列键变为产生一个局部变量类别ID,然后将类别名称分配给密钥。 var_dump($cats)
显示每行都被添加到变量中,正如我所描述的那样。
但在foreach中,由于某种原因,每个id返回一个新行,但类别的名称显示为最后一个可能的类别名称,跨所有键。
为什么变量上的转储显示一组数据,但以这种内容的方式打印的循环显示了这种奇怪的呃逆?
像这样:
- 1 |帽子
- 2 |帽子
- 3 |帽子
如果任何人都可以阐明我在做什么错误导致这一点,这将不胜感激。
谢谢!
编辑:
如下的回答后创立的功能代码:
//categories to local array
$catsQuery = "
SELECT id, category, catDirPath
FROM categories
ORDER BY category
";
$catsSql = mysqli_query($link, $catsQuery);
$cats = array();
mysqli_data_seek($catsSql, 0);
while($rowCats = mysqli_fetch_assoc($catsSql))
{
$cats[$rowCats['id']]['catName'] = $rowCats['category'];
$cats[$rowCats['id']]['catPath'] = $rowCats['catDirPath'];
}
// subCats to local array
$subsQuery = "
SELECT id, subCat, category_id, subDirPath
FROM subCats, sub_categories
WHERE subCats.id = sub_categories.sub_id
ORDER BY category_id
";
$subsSql = mysqli_query($link, $subsQuery);
$subs = array();
mysqli_data_seek($subsSql, 0);
while($rowSubs = mysqli_fetch_assoc($subsSql))
{
$subs[$rowSubs['id']]['subName'] = $rowSubs['subCat'];
$subs[$rowSubs['id']]['catId'] = $rowSubs['category_id'];
$subs[$rowSubs['id']]['subPath'] = $rowSubs['subDirPath'];
}
// loop through categories and if subs exist, add to resultset and display
foreach ($cats as $catId => $cat)
{
$pageContent .= "
<div style='margin-bottom: 10px; border black solid 1px;'>
<ul>
<li style='list-style-type: none; margin-bottom: 5px;'><a href='$docPath/category/{$cat['catPath']}/'>{$cat['catName']}</a></li>
";
foreach ($subs as $subId => $sub)
{
if($sub['catId'] == $catId)
{
$pageContent .= "
<li style='list-style-type: circle; padding-left: 15px; font-size: 70%;'><a href='$docPath/category/{$cat['catPath']}/{$sub['subPath']}/'>{$sub['subName']}</a></li>
";
}
}
$pageContent .= "
</ul>
</div>
";
}
答
正如您已经构建了数组,你必须做你的foreach循环是这样的:
foreach ($cats as $catId => $cat)
{
$pageContent .= "<p>$catKey | ".$cat['catName']."</p>";
}
但为什么不只是$cats[$rowCats['id'] = $rowCats['category'];
在第一位呢? 然后这就足够了:
foreach ($cats as $catId => $catName)
{
$pageContent .= "<p>$catKey | $catName</p>";
}
答
你的代码看起来没问题。你在while循环之后在你的$ cats数组上试过var_dump了吗?我怀疑这条线是造成你的问题
foreach ($cats as $catKey => $cat['$catName'])
你或许应该改变它OT
foreach ($cats as $catKey => $catDetails)
{
$catName = $catDetails['catName'];
$pageContent .= "<p>$catKey | $catName</p>";
}
感谢您的输入,出兴趣的缘故,PHP允许你这样做:'$ pageContent。 =“
$ catKey | {$ cat ['catName']}
”;' – 2012-04-22 14:14:08是的,但我不喜欢它,它变得如此不可读,并且对我来说有太多的“黑魔法”:)我保留我的代码干净且可预测 – 2012-04-22 14:37:39
请参阅作为答案的结果添加到我的操作中的代码:)骨架在那里,我现在可以使用它!非常感谢!! – 2012-04-22 20:42:09