-3

我通常编写 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

4 回答 4

2

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

于 2013-02-07T19:52:18.147 回答
0

简单的说:

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

相当于:

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

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

于 2013-02-07T20:40:43.300 回答
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 中那样互换。

于 2013-02-07T19:53:54.037 回答
0

有不同的值:

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

假设您有一个属性 id 设置为 341 的 obj。

这个数组:

$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”调用子菜单。这等于“教程真棒!”

于 2013-02-07T19:53:54.020 回答