我通常会编写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);
答案 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
数组中的索引。