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

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

<?php
print count($w) . "\n";
$w[3] = "rt";
$w[100] = "tt";
print $w[0] . $w[1] . $w[2] . $w[3] . $w[100] . "\n";
print_r( $w );
?>

结果为:

0
rttt
Array
(
    [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 < 3; i++ )
		scanf( "%d", a+i );
	cout << a[0] << " " << a[1] << " " << a[2] << endl;
	return 0;
}

若从键盘输入一行:1 2 3

则程序能输出正确结果为:1 2 3

而单纯地将这段程序改写成php,如下:

<?php
for( $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数组与fscanf的一些注意事项

时间: 2024-10-08 03:35:34

php数组与fscanf的一些注意事项的相关文章

把Java数组转换为List时的注意事项

本文由 ImportNew - 飘扬叶 翻译自 mlangc.欢迎加入翻译小组.转载请见文末要求. 不幸的是并不是每件事都尽如人意.举个例子,现在将一个Java数组转换为List.当然,我们可以使用Arrays.asList方法,但是如果没有慎重思考就随便使用几乎肯定会产生令人讨厌的意外.考虑完下面这段程序并预测其输出你就明白我的意思了: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package com.wordpress.mla

c 数组与指针的使用注意事项

数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这种信息的丢失称为退化 只要把数组当做参数传递给函数,数组免不了退化为指针 但需要记清楚代码中那些地方发生过数组退化 因为他会引起一些不易察觉的错误 举例说明: char ar[] = "abc";sizeof(ar) 结果为:6char *ch = ar; sizeof(ch) 结果为 8

JavaSE入门学习9:Java基础语法之数组

一数组的定义 数组可以理解为是一个巨大的"盒子",里面可以按顺序存放多个类型相同的数据,比如可以定义int型的数组 scores存储4名学生的成绩. 数组中的元素都可以通过下标来访问,下标从0开始.例如,可以通过scores[0]获取数组中的第一个元素76, scores[2]就可以取到第三个元素92. 二操作数组只需要四个步骤: 1声明数组 语法:数据类型[ ] 数组名:或者 数据类型 数组名[ ]: 其中,数组名可以是任意合法的变量名,如: 2分配空间 简单地说,就是指定数组中最多

数组介绍

概念:什么是数组? 数组就是若干个有序的相同数据类型的元素的集合. 数组是构造类型,数组元素既可以是基本数据类型也可以是构造类型.例如二维数组或者多维数组,数组元素本身也是个数组,也就是构造类型数据. 数组的分类: 按存储元素的类型: 1. 数值数组 2. 字符数组 3. 指针数组 4. 结构数组(用来存放一个结构体类型的数据) 按照数组的维度: 1. 一维数组 2. 两位数组 3. 多维数组 一维数组的定义: 类型修饰符 数祖名[常量表达式]: 注意事项: 1. 数组长度可以是常量或者常量表达

JS中关于数组的内容

  前  言 LIUWE 在网站制作过程中,数组可以说是起着举足轻重的地位.今天就给大家介绍一下数组的一些相关内容.例如:如何声明一个数组和在网站制作过程中我们常用的一些数组的方法.介绍的不好还请多多包涵... 首先我们应该先了解一下什么是数组,数组的基本概念是什么? 1.定义:数组是在内存空间中连续存储的一组有序数据的集合. 2.元素在数组的顺序为下标,可以使用下标访问数组的每一个元素. 一.如何声明一个数组? 1.使用字面量声明: var arr=[]; //声明了一个空的数组 2.使用ne

JS数组去重,js中数组(Array)的排序(sort)

JS数组去重 var ddd = [1,2,4,5,2, 222,1,5,6]; var uq = {}; var rq = []; for(var i=0; i<9; i++){ if(!uq[ddd[i]]){ uq[ddd[i]] = true; rq.push(ddd[i]); } } return rq; js中数组(Array)的排序(sort)注意事项 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrD

&lt;18&gt;【掌握】二维数组定义+

[掌握]二维数组定义 二维数组: 可以看做是一个特殊的一维数组 ,这个一维数组的每个元素又是一个一维数组 二维数组的定义 数据类型 数组名[第一维的长度(行)][第二维的长度(列)]; int a[2][3]; 理解方法: 1)这是一个特殊的一维数组,一维数组有两个元素 a[0] a[1] a[0] 它又存放了一个一维数组该数组长度为 3 2)定义了一个2行3列的一个矩阵 #include <stdio.h> #define M 3 int main(int argc, const char

C语言-字符串(单个字符)和字符数组

一.字符串(单个字符)和字符数组的定义 1.单个字符的定义 char i = ‘x’ (单个字符的定义) 字符串创建后为常量无法修改 2.字符数组的定义 char i [4]=”xxxx”; char i []=”xxxx”; char i [4]={‘x’’x’’x’’x’}; 其中定义的数组的元素数要比实际赋值的数量多一,用于存放\0位置 字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了. 二字符串(单个字符)和字符数组输入 1.scanf函

一个实用的从文本文件读取数据进行排序的程序

程序说明 这是一个十分可靠的程序,这个程序的查错能力非常强悍.程序包含了文件操作,归并排序和字符串输入等多种技术. 程序的功能是从外部读取一个包括int型数据的文本文件,然后将它保存到内部临时数组,对数组进行排序后,以文本形式输出到指定的文件上.因为是int类型的数据,没有很严重的损失精度的问题. 正常运行要求: 包括数据的源文件内不能包括其他任何除数字和空白字符(空格,制表符,换行符)之外的任何字符,源文件最开始必须是数字字符,要保证源文件的数据计数正确.同时保证文件名有效. 完整代码 警告: