我正在做啧啧,但我无法理解这种语法

时间:2013-02-07 19:50:17

标签: php procedural-programming

我通常会编写oop代码,这可能就是我从未见过这种编码方式的原因。我不理解下面多维数组中的语法,为什么[$obj->id]['label']不仅仅是$obj['id']['label']]

$sql = "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC";
$items = mysql_query($sql);
while ($obj = mysql_fetch_object($items)) {
    if ($obj->parent_id == 0) {
        $parent_menu[$obj->id]['label'] = $obj->label;
        $parent_menu[$obj->id]['link'] = $obj->link_url;
    } else {
        $sub_menu[$obj->id]['parent'] = $obj->parent_id;
        $sub_menu[$obj->id]['label'] = $obj->label;
        $sub_menu[$obj->id]['link'] = $obj->link_url;
        if (!isset($parent_menu[$obj->parent_id]['count'])) {
            $parent_menu[$obj->parent_id]['count'] = 0;
        }
        $parent_menu[$obj->parent_id]['count']++;
    }
}
mysql_free_result($items);

4 个答案:

答案 0 :(得分:2)

这是因为mysql_fetch_object将结果行作为对象获取。其他的,例如mysql_fetch_array,将结果行作为关联数组获取。

答案 1 :(得分:0)

[$obj->id]['label']$obj['id']['label']甚至没有接近相同的事情。

$parent_menu[$obj->id]['label']使用'label'$obj->id键的$parent_menu键获取值。 $obj['id']['label']使用'label'数组(不是数组)中'id'键的值,使用$obj键获取值。

数组键和属性在PHP中不可互换,因为它们位于JavaScript中。

答案 2 :(得分:0)

有不同的价值观:

$obj->id有一个值,它引用一个值。如果您只是写'id',则引用键'id'(作为字符串)

想象一下,你有一个obj,其属性id设置为341。

和这个数组:

$sub_menu = array(
    2 => array(
        'name' => 'Blog',
        'label' => 'My Blog'
    ),
    341 => array(
        'name' => 'Downloads',
        'label' => 'Downloads'
    ),
    'id' => array(
        'name' => 'Tutorials',
        'label' => 'Tutorials Awesome!'
    )
);

所以当你调用数组时:

$sub_menu[$obj->id]['label']那你实际上是在打电话: $sub_menu[341]['label'] 这相当于'下载';

如果你打电话 $sub_menu['id']['label']然后您使用键'id'调用子菜单。 这等于'Tutorials Awesome!'

答案 3 :(得分:0)

简单地说:

$parent_menu[$obj->id]['label'] = $obj->label;

相当于:

$myID = $obj->id;
$parent_menu[$myID]['label'] = $obj->label;

操作是检索$obj的类属性id的值并将其用作$parent_menu数组中的索引。