0

首先,我为标题道歉,我没有找到一个适合这个问题的好标题。

我正在处理一个已经存在的 Symfony 项目,我需要添加一些东西。因此,我正在阅读它,并且遇到了使用数组的地步,但我不明白它是如何工作的。

$this->categories = Doctrine_Query::create()
            ->from('Category c')
            ->leftJoin('c.Sizings s')
            ->where('c.level = 0')
            ->orderBy('c.id ASC, s.gender ASC, s.size ASC')
            ->execute();

        $rCategories = Doctrine_Query::create()
            ->from('Category c');
        $allCategories = $rCategories->execute();

        $cat = array();
        foreach($allCategories as $c) {
              [...]
              $cat[$c->getRootId()]['children'][$c->getId()]['root'] = $c;
              [...]

所以我做了一些测试,看看如何访问值,这个:

$cat[$c->getRootId()]['children'][$c->getId()]['root'] = $c;
    foreach($cat as $ca){
      print($ca['root']);
      echo '<br/>';
      foreach($ca['children'] as $child){
        print($child['root']);
      }
    }
die;

显示:

网球拍//这是主要类别
迅雷 //这是一个子类

首先,为什么不是 ID 而不是 Names?

这段代码到底是什么意思?

$cat[$c->getRootId()]['children'][$c->getId()]['root'] = $c;

最后有这个:

$this->allCategories = $cat;

我将$allCategories在部分中使用以显示每个类别及其子类别,然后将其包含在我的 indexSuccess 中。

但这是最后一点,我必须有一个新的专栏。该列已经在数据库中,我可以在操作类中访问它的值

$c->getBrand();

我想将它放在数组 cat 中,然后再放入,$this->allCategories这样我就可以在 indexSuccess 中使用的部分中访问它,最后在我在部分中拥有的列品牌中设置值。

恐怕我不够清楚,但简而言之:我不明白这一行:

$cat[$c->getRootId()]['children'][$c->getId()]['root'] = $c;

而且我想在数组 $cat 中有一个新参数,并在将它提供给 indexsuccess 后访问这个新值

$this->allCategories = $cat;

我想知道如何访问新值。

我希望我足够清楚,感谢您抽出宝贵时间阅读本文。

4

1 回答 1

0

首先,由于您不包含任何代码$c,因此很难理解它实际包含的内容。但简而言之,$c是某种类的实例。

很可能它以这种方式存在:

$c = new someSortOfClass;

如果您检查了 的代码someSortOfClass,您会发现getRootId()getId()作为其定义中的方法。他们所做的取决于代码,并且由于没有可查找的代码 - 我假设他们返回某种可以是 akey或aindex的值array

接下来会发生什么 - 在多维数组中创建新元素,并将整个实例$c分配给第 4 级数'root'组键:

$cat[$c->getRootId()]['children'][$c->getId()]['root'] = $c;

如果你做了一个var_dump($cat),你会看到这个数组的整个树,然后可以欣赏它的多维性是如何工作的。

本质上 - php 数组可以有任何类型的值,包括其他数组,所以:

$array = Array('key1': 'string', 'key2': Array('child_key1': 2));
print $array['key2']['child_key1']; // 2

就是这样一个数组的一个例子。

于 2013-05-16T11:01:13.863 回答