【问题标题】:how to access the array inside the array in codeigniter?如何在codeigniter中访问数组内的数组?
【发布时间】:2017-11-16 08:50:23
【问题描述】:

我是 CI 新手。我有一个功能可以将数据列表作为类别访问。函数是这样的:

      public function get_category_tree()
{
    $this->ci->db->where('is_display','1');
    $query = $this->ci->db->get('product_categories');

    if ($query->num_rows() > 0) 
    {

        foreach($query->result() as $cat)
        {
            if($cat->parent_id=='0'){
                //category
                $categories_arr[$cat->id] = array('id' => $cat->id, 'parent_id'=>$cat->parent_id ,'name' => $cat->name, 'subcat' => '');
            }else{
                //subcategory;
                $categories_arr[$cat->parent_id]['subcat'][] = array('id' => $cat->id, 'parent_id' => $cat->parent_id, 'name' => $cat->name);
            }
        }
        return $categories_arr;
    }               
    return false;
}

这个函数是在通用库中定义的,我从控制器访问它是这样的:

    $this->data['category_tree'] = $this->general->get_category_tree();

这曾经给我这个结果:

    Array
  (
[id] => 19
[parent_id] => 0
[name] => DVDs & Movies
[subcat] => 
    )
    Array
    (
[id] => 32
[parent_id] => 0
[name] => Stamps
[subcat] => Array
    (
        [0] => Array
            (
                [id] => 78
                [parent_id] => 32
                [name] => Africa
            )

        [1] => Array
            (
                [id] => 79
                [parent_id] => 32
                [name] => Asia
            )

        [2] => Array
            (
                [id] => 80
                [parent_id] => 32
                [name] => Australia
            )

        [3] => Array
            (
                [id] => 81
                [parent_id] => 32
                [name] => Br Comm Other
            )

        [4] => Array
            (
                [id] => 82
                [parent_id] => 32
                [name] => Canada
            )

        [5] => Array
            (
                [id] => 83
                [parent_id] => 32
                [name] => Europe
            )

        [6] => Array
            (
                [id] => 84
                [parent_id] => 32
                [name] => Latin America
            )

        [7] => Array
            (
                [id] => 85
                [parent_id] => 32
                [name] => Middle East
            )

        [8] => Array
            (
                [id] => 86
                [parent_id] => 32
                [name] => Publications
            )

        [9] => Array
            (
                [id] => 87
                [parent_id] => 32
                [name] => Topical & Specialty
            )

        [10] => Array
            (
                [id] => 88
                [parent_id] => 32
                [name] => UK (Great Britain)
            )

        [11] => Array
            (
                [id] => 89
                [parent_id] => 32
                [name] => United States
            )

        [12] => Array
            (
                [id] => 90
                [parent_id] => 32
                [name] => Worldwide
            )

    )

   )

现在我将我的 php 升级到 7+,现在是行

    $categories_arr[$cat->parent_id]['subcat'][] = array('id' => $cat->id, 'parent_id' => $cat->parent_id, 'name' => $cat->name);

没有工作并给出了php错误,我只是删除了[],它变成了

     $categories_arr[$cat->parent_id]['subcat'] = array('id' => $cat->id, 'parent_id' => $cat->parent_id, 'name' => $cat->name);

现在当我 print_it 它给了我这个结果:

    Array
   (
  [id] => 19
  [parent_id] => 0
  [name] => DVDs & Movies
  [subcat] => 
   )
   Array
  (
  [id] => 32
  [parent_id] => 0
 [name] => Stamps
[subcat] => Array
    (
        [id] => 90
        [parent_id] => 32
        [name] => Worldwide
    )

  )

只有子数组的最后一个数组。我该如何解决。我搜索了很多有关升级和修复的信息,但找不到任何有用的东西。任何人都可以请帮忙。在此先感谢

【问题讨论】:

  • 什么错误?
  • @JYoThI 致命错误:未捕获的错误:E:\xampp\htdocs\tshirt_design\application\libraries\general.php:209 中的字符串不支持 [] 运算符 堆栈跟踪:#0
  • 您将 subcat 定义为 string 。所以现在你在字符串上使用数组语法所以.it会给出这个错误。将 subcat 定义为 array 。正如下面提到的@Mohmad。

标签: codeigniter php-7.1


【解决方案1】:

因为您在定义$categories_arr[$cat->id] 时将subcat 定义为'subcat' => '' 的字符串。使用这个:

public function get_category_tree()
{
    $this->ci->db->where('is_display','1');
    $query = $this->ci->db->get('product_categories');

    if ($query->num_rows() > 0) 
    {

        foreach($query->result() as $cat)
        {
            if($cat->parent_id=='0'){
                //category
                $categories_arr[$cat->id] = array('id' => $cat->id, 'parent_id'=>$cat->parent_id ,'name' => $cat->name, 'subcat' => array());
            }else{
                //subcategory;
                $categories_arr[$cat->parent_id]['subcat'][] = array('id' => $cat->id, 'parent_id' => $cat->parent_id, 'name' => $cat->name);
            }
        }
        return $categories_arr;
    }               
    return false;
}

【讨论】:

  • 哇!!这有效,但我如何检查 $category['subcat'] 数组是否为空
  • 您可以使用if(!$category['subcat'])if(empty($category['subcat'])) 来检查数组是否为空。
  • 好的。你能告诉我 $categories_arr[$cat->id] 和 $categories_arr[$cat->parent_id] 是什么吗?
  • 是定义数组吗?
  • $categories_arr[$cat->id] = 定义具有$cat->id 索引的$categories_arr 数组元素的值。因此,如果不存在,则创建它,如果存在,则覆盖它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2019-06-24
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
相关资源
最近更新 更多