如何遍历对象的特定部分

时间:2014-05-07 17:23:52

标签: php

我有一个看起来像这样的对象

zen_categories_ul_generator Object
(
[root_category_id] => 0
[max_level] => 6
[data] => Array
    (
        [0] => Array
            (
                [19] => Array
                    (
                        [name] => Brushes
                        [count] => 0
                    )

                [29] => Array
                    (
                        [name] => Clips
                        [count] => 0
                    )

                [2] => Array
                    (
                        [name] => Combs
                        [count] => 0
                    )

                [27] => Array
                    (
                        [name] => Jewellery
                        [count] => 0
                    )
             )
        [1] => Array
            (
                [57] => Array
                    (
                        [name] => Testing
                        [count] => 0
                    )
             )

我想循环遍历$ this-> data [0]级别的所有信息,我使用

       foreach($this->data[0] as $category_id => $category) {
            $result .= $category_id.' - '.$category['name'];
        }
       return $result;

但这只是数组中的最后一项。因此,在这种情况下,它只会有27件珠宝,但其他阵列物品都不会被退回。

我做错了什么?

感谢

NB我只需循环数据[0] - 而不是数据[1]!

编辑 - 这是一个包含更多代码的粘贴框,以便更容易理解我尝试做什么以及我是如何做的。感激不尽的任何帮助

http://pastebin.com/Vrw9f7Xh

1 个答案:

答案 0 :(得分:-1)

问题: 好的,所以你想循环遍历所有信息$ this-> data [0],来渲染一个菜单。

实际上,你自己非常接近解决方案。 用于呈现产品项的行是:

$result .= '<a href="' . $category_id . '">'.$category['name'] . '</a> (' . $category['count'] . ')';

以下是工作示例,它独立运行。 您可以将其另存为menu.php并进行测试。 我不得不评论zen_ *函数,但我认为相关部分是渲染,对吧?

class zen_categories_ul_generator
{
    function setTestData($data) { $this->data = $data; }

    function buildMenu() {
        $result = '';
        // removed home link, unchanged and not important in this example

        // submenu
        $result .= '<li class="submenu">';

            $result .= '<a href="#">Products</a>';
            $count = 0;
            foreach($this->data[0] as $category_id => $category) {
                $count++;
                $result .= '<ul class="level2">';
                    $result .= '<li class="submenu">';
                        //$result .= '<a href="' . zen_href_link(FILENAME_DEFAULT, 'cPath=' . $category_id) . '">'.$category['name'].'</a>'.$count;

                        $result .= '<a href="' . $category_id . '">'.$category['name'] . '</a> (' . $category['count'] . ')';


                    $result .= '</li>';
                $result .= '</ul>';
            }

        $result .= '</li> Items:' . $count;

        return $result;
    }

}

$object = new zen_categories_ul_generator;

// ok, lets add your example data from outside to the object, in order to test the rendering
$data = array(
            0 => array(
                    19 => array('name' => 'Brushes',   'count' => 5),
                    29 => array('name' => 'Clips',     'count' => 2),
                    2  => array('name' => 'Combs',     'count' => 1),
                    27 => array('name' => 'Jewellery', 'count' => 3)
                 )
            );

$object->setTestData($data);

// render the menu
echo $object->buildMenu();

<强>结果

enter image description here

Count是迭代次数=类别中的产品数量。

产品名称后面的计数器来自数组,键#34;计数&#34;。