首页 > 后端开发 > php教程 > php数组与fscanf的一些注意事项

php数组与fscanf的一些注意事项

WBOY
发布: 2016-06-23 13:52:37
原创
1544 人浏览过

前面的一篇博文提到php中数组是没有下标越界这一说的,如下的程序可以正常运行:

<?phpprint count($w) . "\n";$w[3] = "rt";$w[100] = "tt";print $w[0] . $w[1] . $w[2] . $w[3] . $w[100] . "\n";print_r( $w );?>
登录后复制

结果为:

0rtttArray(    [3] => rt    [100] => tt)
登录后复制

由上print_r这一句的输入结果中可以看出,php中的数组其实实际上是“映射的集合”,是类似于python中字典和java中Map的一种数据结构。因此它的下标不需要是连续的,可以是离散的,甚至下标值可以是任意数据类型,不一定要是整数。这里的下标值其实就相当于键值对中的键名而已。而当下标(键名)在数组中不存在时,则php默认返回的值是空串""。

另外要注意php中的fscanf函数,看下面一段c++的代码:

#include<iostream>using namespace std;int main(){	int a[3];	for( int i = 0; i   <p></p>  <p>若从键盘输入一行:1 2 3 </p> 则程序能输出正确结果为:1 2 3  <p>而单纯地将这段程序改写成php,如下:</p>  <p></p>  <pre name="code" class="sycode"><?phpfor ( $i = 0; $i < 3; $i++ )	fscanf(  STDIN, "%d", $a[$i] );print $a[0]. " ". $a[1]. " ". $a[2] . "\n";?>
登录后复制

即scanf改为fscanf后,则不能得到期望的结果。原因是,php中fscanf是把输入中的”一行“作为一个输入单位进行解析的,这样在输入”1 2 3“后,php从该字符串中解析到了第一个整数值1把它赋给a[0]后,字符串中剩余字符就会被忽略,程序等待下一行的输入。这就是c++中scanf和php中fscanf间要注意的区别。值得一提的是,php中开头的读文件函数基本都是以”行“为单位的。

若要让php能顺利进行输入,一般有两种方法,1 用格式化字符串,比如上面将fscanf的第二个参数改为 "%d%d%d"。2 用fgets函数读一行,然后自己利用split,int等函数进行字符串的解析,得到自己想要的数据。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板