作者gpmm (银色)
看板PHP
标题Re: [请益] mysql_fetch_array 取出的阵列数
时间Thu Jul 28 10:29:58 2011
首先小弟很敬佩您一直很有热诚回答许多板友的问题,
这点是小弟所作不到的,
关於「函式本身作用」的部份您的说明大致上没有什麽问题,
但是很多观念且让小弟厘清一下:
※ 引述《tkdmaf (皮皮快跑)》之铭言:
: 还是专文回您好了。
: $row = mysql_fetch_row();
: 就是按照栏位的顺序以阵列从0开始的方式传递每一栏的资料。
: 基本而言这个习惯是针对其他语言转过来的人而用的。
: 因为php的阵列是比较特立独行在於他可以用「文字」做为阵列的索引名称。
: 但事实上反过来说,习惯於使用栏位名称做为取值的人可能就很不习惯这个做法。
: 取出来的是$row[0],$row[1]......
基本上,一般语言里通常会有 Array / Hash Table 两种不同的结构,
但在 PHP 的程式语言里这两种结构的界定很模糊,
或着根本一点说,他们在表徵上都是以同样的形式出现 - 也就是阵列。
所以请不要误导别人,杂凑是专属於 PHP 的,也不需要自己去下定义:
基本而言这个习惯是针对其他语言转过来的人而用的
因为php的阵列是比较特立独行在於他可以用「文字」做为阵列的索引名称
: $row = mysql_fetch_assoc();
: 就是按照栏位的名称做为阵列的索引名称。
: 习惯php以名称取阵列名的人可能就很习惯这种用法。
: 取出来的是$row['name'],$row['address'],$row['sex'].....等
: $row = mysql_fetch_object();
: 将资料以栏位名称做为资料物件的属性名称。
: 习惯於物件导向操作的人就会习惯这样的模式。
很遗憾,小弟也很习惯物件导向,但我几乎不使用这个方式,
您知道物件跟杂凑在解开後所占用的资源差异吗?
当我们反覆产生 100 个 object 和 100 个 hash 或 array 时可能没有什麽感觉,
但是良好的节约习惯常常会在不经意的地方救自己一命,
并不是说不要使用物件型态的传递方式,
重点是要慎选当前状况最适合使用的资料类型。
: 当然啦!这个资料物件是程式产生的所以你除了属性之外也没办法能对他做其他的事。
: (比如让这个资料物件提供方法这种事当然不行。)
: 不过php比较诡异的地方就是说………
: foreach()除了可以解阵列……他连物件的属性都可以解。
不知道您是否清楚,foreach 在对 object 所作的处理实际上是什麽,
有兴趣的人可以参考
http://php.net/manual/en/language.oop5.iterations.php
简单来说,实际上是 object 去提供了自己被巡回的能力,并没有什麽诡异的地方,
基本上在离我们很近的 javascript 和离我们很远的 java 以及其他众多的
程式语言中,物件本身都有实做巡回的能力,所以这不是
不过php比较诡异的地方就是说………
foreach()除了可以解阵列……他连物件的属性都可以解。
: 基本上不建议使用mysql_fetch_array()的原因即在於他是将
: mysql_fetch_row()和mysql_fetch_assoc()两种都取。
: 这麽一来在计算阵列或是用foreach去解的话等於是解两倍的资料。
: 当然就容易发生一些不该发生的错误。
不知道您是否清楚 mysql_fetch_array 一共提供了两种参数输入,
其中第二个参数可以指定回传类型
MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH
关於 array 和 hash 在使用上各有各的优缺点,
只要理解函数回传的资料,并选择当前状况最适合使用的资料类型,
array 并不一定会比 hash / object 难用
: 小知识:
: 资料类别的定义方式:
: <?php
: class row{}
: $row = new row;
: $row->name = 'sam';
: $row->address = 'taipei';
: $row->sex = 'male';
: foreach($row as $key => $value){
: echo "{$key} => {$value}<BR>";
: }
: ?>
请问您所提供的这个
小知识:资料类别的定义方式,
是哪边所记载的知识?或着只是您个人的经验分享呢?
如果真的这样去使用,物件大概会哭泣吧…
(而且小弟不懂您的
资料类别是什麽意思)
: 就会印出:
: name => sam
: address => taipei
: sex => male
--
如同小弟一开始所说,很敬佩您热心回答的热诚,
大家在板上讨论不同主题这麽多次了,
小弟很了解您是听不进去的,所以这篇主要也只是帮板友厘清一些观念而已
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.31.89.70
1F:推 tkdmaf:好东西好观念我怎麽会不听呢?XDD 07/28 11:00
2F:→ tkdmaf:我知道mysql_fetch_array()有第二个函式。 07/28 11:01
3F:→ tkdmaf:打错!参数。(就说了我心不到手到。) 07/28 11:01
4F:→ tkdmaf:不过,对於初学或是以开发程式为目的的人而言。 07/28 11:02
5F:→ tkdmaf:讲得太过原理的东西....似乎合适用於改善功能效率的研究。 07/28 11:03
6F:→ tkdmaf:但并不合适在一开始就要他们接受深入探讨吧。 07/28 11:03
7F:→ tkdmaf:至於资料类别...小知识有CODE不是很清楚了? 07/28 11:08
8F:→ tkdmaf:或是像CI那样的db_query(内置解出资料方法的资料类别) 07/28 11:09
9F:→ tkdmaf:如果这样要哭哭,ci的db_query你叫他情何以堪? 07/28 11:11
10F:推 JoeHorn:错误的观念比没观念还要糟糕... 07/28 21:16
11F:推 tkdmaf:知道问题会改,比被指责不改还糟糕! 07/28 22:01
12F:→ JoeHorn:建议楼上重新看一下上面这句,训练一下逻辑... 07/28 22:26
13F:→ gpmm:自从之前第几代语言後,物件就算被滥定义/使用也已经不稀奇了 07/29 01:51
14F:→ tkdmaf:所谓「滥定义/使用」的标准是?能给个量化的资料吗? 07/29 08:14
15F:→ gpmm:请你解释/定义何谓你所谓的资料类别 07/29 11:04
16F:→ superpai:建议引言再加上一些符号不只是颜色 我看到第二次才看出 07/29 11:50
17F:→ superpai:那是要反驳的点. 07/29 11:50