Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和MYSQL构建多维关联数组_Php_Multidimensional Array_Associative Array - Fatal编程技术网

使用PHP和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_

我试图在从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_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,我的代码正在工作。我只是忘记了在打印之前检查值是否是数组,因此导致了一些奇怪的结果。请修复代码,使其易读。修复代码,使其易读。