使用PHP和MYSQL构建多维关联数组
我试图在从MySQL查询获取结果时构建多维关联数组。 但我不知道如何才能做到这一点。 我想构建一个这样的阵列:使用PHP和MYSQL构建多维关联数组,php,multidimensional-array,associative-array,Php,Multidimensional Array,Associative Array,我试图在从MySQL查询获取结果时构建多维关联数组。 但我不知道如何才能做到这一点。 我想构建一个这样的阵列: array ("cat_name" => "category1", "id_cat" => "1", "sub_cat" => array ("name_sub_cat" => "subCategory", "id_sub_cat" => "4", "ss_cat" =>array ("ss_cat_name" =>"ss_
array ("cat_name" => "category1",
"id_cat" => "1",
"sub_cat" => array ("name_sub_cat" => "subCategory",
"id_sub_cat" => "4",
"ss_cat" =>array ("ss_cat_name" =>"ss_cat1",
"id_ss_cat" => "4"
)
)
);
这里是我构建阵列的地方:编辑:我最终得到了类似的东西,不是很性感,但如果你认为我就快到了
while($row = mysql_fetch_assoc($resultQueryCat)){
$menuArray[$row["id_cat"]]["cat_name"] = $row["cat_name"];
$menuArray[$row["id_cat"]][$row["id_sub_cat"]]["id_sub_cat"] = $row["id_sub_cat"];
$menuArray[$row["id_cat"]][$row["id_sub_cat"]]["name_sub_cat"] = $row["name_sub_cat"];
$menuArray[$row["id_cat"]][$row["id_sub_cat"]][$row["ss_cat_name"]]["ss_cat_name"] = $row["ss_cat_name"];
$menuArray[$row["id_cat"]][$row["id_sub_cat"]][$row["ss_cat_name"]]["id_ss_cat"] = $row["id_ss_cat"];
}
Edit2:显示数组的代码
$menu.='<ul>';
foreach ($menuArray as $key) {
$compteur_cat++;
$menu.= '<div id="collapsiblePanelCol'.$compteur_cat.'" class="collapsiblePanelCol floatleft">
<li class="categorie"> '.$key["cat_name"].'
<ul>';
foreach ($key as $key1) {
if (is_array($key1){/* One of the thing i forgot which totally screwed up my results*/
$menu.= '<ul>
<li class="ss_categorie">'.$key1["name_sub_cat"].'<ul>';
foreach ($key1 as $key2) {
if (is_array($key2)){
$menu.= '<li class="element">'.$key2["ss_cat_name"].'</li>'; }
}
$menu.= '</ul></li></ul>';
}
}
$menu.='</ul>
</li>
</div>';
}
$menu.= '</ul>';
$menu.='';
foreach($menuArray作为$key){
$compteur_cat++;
$menu.='
- 。$key[“cat_name”]。'
”;
foreach($key作为$key 1){
if(u array($key1){/*是我忘了的事情之一,它完全搞砸了我的结果*/
$menu.='
- 。$key1[“name_sub_cat”]。
;
foreach($key1作为$key2){
如果(是_数组($key2)){
$menu.='- '.$key2[“ss_cat_name”]。
'}
}
$menu.='
';
}
}
$menu.='
';
}
$menu.='
';
谢谢
最终编辑:我的代码正在工作:)我编辑了前面的代码以使其正确这不是一项容易的任务,因为来自DB的数据可能包含循环:-) 我最好将它保存在id->data hashmap中,这样您就可以更容易地构建结构
不确定为什么需要多维。这不是一项容易的任务,因为来自DB的数据可能包含循环:-) 我最好将它保存在id->data hashmap中,这样您就可以更容易地构建结构
不确定为什么需要多维。我构建多维数组的方法是通过类及其对象 例如:
class Categories
{
public $cat_name;
public $id_cat;
function __construct($cat_name, $id_cat)
{
$this->id = $id_cat;
$this->name = $cat_name;
$this->sub_cat = array();
}
}
class SubCategories
{
public $name_sub_cat;
public $id_sub_cat;
function __construct($name_sub_cat, $id_sub_cat)
{
$this->id = $id_sub_cat;
$this->name = $name_sub_cat;
$this->ss_cat = array();
}
}
class SSCategories
{
public $ss_cat_name;
public $id_ss_cat;
function __construct($ss_cat_name, $id_ss_cat)
{
$this->id = $id_ss_cat;
$this->name = $ss_cat_name;
}
}
然后写入这些类(在获取MySQL数据库数据[假设OOP MySQL]之后):
对于原始if循环中的每一个子数组,都要重复相同的操作。这花了一段时间:)
注意:如果没有更多的子数组,则关闭if循环(继承)
echo '<pre>';
print_r($array);
echo '</pre>';
echo';
打印(数组);
回声';
以上代码将有助于显示阵列的级别 我构建多维数组的方法是通过类及其对象 例如:
class Categories
{
public $cat_name;
public $id_cat;
function __construct($cat_name, $id_cat)
{
$this->id = $id_cat;
$this->name = $cat_name;
$this->sub_cat = array();
}
}
class SubCategories
{
public $name_sub_cat;
public $id_sub_cat;
function __construct($name_sub_cat, $id_sub_cat)
{
$this->id = $id_sub_cat;
$this->name = $name_sub_cat;
$this->ss_cat = array();
}
}
class SSCategories
{
public $ss_cat_name;
public $id_ss_cat;
function __construct($ss_cat_name, $id_ss_cat)
{
$this->id = $id_ss_cat;
$this->name = $ss_cat_name;
}
}
然后写入这些类(在获取MySQL数据库数据[假设OOP MySQL]之后):
对于原始if循环中的每一个子数组,都要重复相同的操作。这花了一段时间:)
注意:如果没有更多的子数组,则关闭if循环(继承)
echo '<pre>';
print_r($array);
echo '</pre>';
echo';
打印(数组);
回声';
以上代码将有助于显示阵列的级别 感谢您的洞察力,我需要构建一个嵌套菜单,我认为多维数组将是最好的解决方案。我对php非常陌生,我不知道什么是hashmaps。你能提供一些信息吗,或者我可以问问我的朋友谷歌;)实际上,任何数组都是hashmap。所以要将整行放入数组中,我会这样做:$data[$row[id]]=$row;在开始时,初始化如下:$data=array();好的,我现在不在电脑上,我会尽快提供一些代码来完成我的问题。我做了一些编辑,这似乎是我要找的,但现在我很难准确地回应整个问题。谢谢你的帮助Barsmonder,我的代码正在工作。我只是忘记了在打印之前检查值是否是数组,结果很奇怪。感谢您的帮助,我需要构建一个嵌套菜单,我认为多维数组是最好的解决方案。我对php非常陌生,我不知道什么是hashmaps。你能提供一些信息吗,或者我可以问问我的朋友谷歌;)实际上,任何数组都是hashmap。所以要将整行放入数组中,我会这样做:$data[$row[id]]=$row;在开始时,初始化如下:$data=array();好的,我现在不在电脑上,我会尽快提供一些代码来完成我的问题。我做了一些编辑,这似乎是我要找的,但现在我很难准确地回应整个问题。谢谢你的帮助Barsmonder,我的代码正在工作。我只是忘记了在打印之前检查值是否是数组,因此导致了一些奇怪的结果。请修复代码,使其易读。修复代码,使其易读。