我有以下代碼: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>
";
}
感謝您的輸入,出興趣的緣故,PHP允許你這樣做:'$ pageContent。 =「
$ catKey | {$ cat ['catName']}
」;' – 2012-04-22 14:14:08是的,但我不喜歡它,它變得如此不可讀,並且對我來說有太多的「黑魔法」:)我保留我的代碼乾淨且可預測 – 2012-04-22 14:37:39
請參閱作爲答案的結果添加到我的操作中的代碼:)骨架在那裏,我現在可以使用它!非常感謝!! – 2012-04-22 20:42:09