Home  >  Article  >  Backend Development  >  php数组与fscanf的一些注意事项

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

WBOY
WBOYOriginal
2016-06-23 13:52:371498browse

前面的一篇博文提到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等函数进行字符串的解析,得到自己想要的数据。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn