2012-04-22 19 views
0

I持って次のコード: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> 
    "; 
} 

2列idcategoryはこのようにデータが含まれている:

  • ID |カテゴリ
  • 1 |靴
  • 2 |シャツ
  • 3 |私がやりたいどのような帽子

は、whileループではcats

ローカル配列は、各列の配列のキーになるように生成されるというローカル変数にテーブルcategories内のすべての行を回していますカテゴリIDが割り当てられ、キーにカテゴリ名が割り当てられます。 var_dump($cats)は、説明したように各行が変数に追加されたことを示しています。

foreachでは、何らかの理由で各IDが新しい行として返されましたが、カテゴリの名前は最後の可能なカテゴリ名としてすべてのキーに表示されます。

なぜそれが変数のダンプがデータの1セットを示していますが、その内容のこのように印刷されたループは、この奇妙なしゃっくりを示したということでしょうか?このよう

  • 1 |帽子
  • 2 |帽子
  • 3 |帽子

誰かが私がこれを引き起こすことに間違っていることにいくつかの光を当てることができれば、それは非常に感謝しています。

ありがとうございました!

EDIT:

以下の回答の結果として作成された機能コード:

//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> 
    "; 
} 

答えて

2

あなたは、アレイを構築してきたように、あなたはこのようなあなたの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>"; 
} 
+0

おかげで、関心の酒のうち、PHPはこれを実行することができます。このラインはあなたがおそらくそれを変更する必要があります問題

foreach ($cats as $catKey => $cat['$catName']) 

を引き起こしていると思われます。 = "

$ catKey | {$ cat ['catName']}

"; –

+0

うん、それは可能だけど、それはそんなに読めなくなって、それにあまりにも多くの "黒い魔法"を持っている。私のコードはきれいで予測可能です –

+0

あなたの答えの結果として私のopに追加されたコードを見てください:)スケルトンはそこにあり、私は今それで動作することができます!どうもありがとうございます!! –

2

コードはOKです。 whileループの後に$ cats配列でvar_dumpを試しましたか?`$ pageContent:私はあなたの入力のためのOT

foreach ($cats as $catKey => $catDetails) 
{ 
    $catName = $catDetails['catName']; 
    $pageContent .= "<p>$catKey | $catName</p>"; 
} 
関連する問題