您的位置:首页 > 编程语言 > PHP开发

PHP 变量、数组(array) 的使用

2014-05-19 13:30 363 查看
    开发微信平台的时候,选了使用脚本语言php,正好作为自己的一个学习方向。正如师兄所推荐的,需要学好一门高级语言(JAVA...),一门脚本语言(php...),一门接近底层的语言(C...)。

   php基本的语法与JavaScript类似,变量的定义的时候不需要规定类型,以“$”符号开头,可以存储 整形和 string类型。PHP4以后引入了引用的概念,类似于C/C++的 “&“ --- 所以可以这样写 $a= "Ray";  $b = &$a;  php对单引号处理为纯文本,双引号包含的内容会查询处理,如echo  '$a' 会被直接输出 $a, 而echo
"$a"; 会输出Ray。

    需要提一下的是php中的预定义变量,这些变量依赖于服务器版本和配置,例如 $_GET['id']从 URL http://www.example.com/test.php?id=1 中获取 id 值。目前对于php预定义变量使用少,相关知识之后再做补充。

====================变量=========================

    重点学习一下php中变量的使用范围。像其他语言一样,局部变量具有相应的作用域,以例子说明:例子取自:http://www.cnblogs.com/confach/articles/470492.html   

<?php
$var=0;
function test($index)
{
$var=$var+1;
echo $index."=".$var."<br>";
}
test(1);
test(2);
?>
输出为:
1=1 

2=1

解决办法1: 使用global 变量, 注意global 关键字后面只可接变量名,不可进行赋值操作。

<?php
$var=0;
function test($index)
{
global $var;
$var++;     echo $index."=".$var."<br>";
}
test(1);
test(2);
?>


输出为:

1=1 

2=2

解决办法2:使用$GLOBALS超全局变量

<?php
$var=0;
function test($index)
{
$GLOBALS["var"]= $GLOBALS["var"]+1;
echo $index."=".$var."<br>";
}
test(1);
test(2);
?>


输出为:

1=1 

2=2

解决办法3:使用static 静态变量 ,不过需要在函数内申明。

======================数组==========================

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。需要指出的是keys既可以默认,则为0,1,2,3... 也可以是自己规定的string类型。并且映射可以包含多层。但是key存在默认强制转换的机制,需要注意。

具体规则如下:

1:包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。

2:浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。

3:布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。

4:Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。

5:数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

举例:

<?php
$array = array(
1    => "a",
"1"  => "b",
1.5  => "c",
true => "d",
2    => "e",
"02" => "f",
);
var_dump($array);
?>
输出: array(3) { [1]=> string(1) "d" [2]=> string(1) "e" ["02"]=> string(1) "f" }

1:当指定部分key时,情况如下
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
8 => "e",
);
var_dump($array);
?>
输出:array(5) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" [8]=> string(1) "e" } 

可以看到c对应为6,a对应0,b对应1,此时如果想要查看echo $array[3]等,会报错undefined offset,因为这几个值就没有定义。

2:多层深度嵌套,例子如下
<?php
$array = array(
"foo" => "bar",
42    => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
输出:string(3) "bar" int(24) string(3) "foo"

可以看到,多层嵌套数组可以通过下标访问,并且使用[]与{ } 均可以访问数组。

3:数组下标的理解
<?php
$arr = array(5 => 1, 12 => 2);

$arr[] = 56;    // This is the same as $arr[13] = 56;

$arr["x"] = 42; // This adds a new element to
// the array with key "x"
$arr[14] = 45; // This adds a new element to

var_dump($arr);
?>
输出:array(4) { [12]=> int(2) [13]=> int(56) ["x"]=> int(42) [14]=> int(45) }

可以看出,如果不写下标,会默认在末尾处添加值,并在上一位的基础上+1,"x"的存储通过散列函数,对应于其他位置,经验证与14的位置并不冲突。

进一步修改:
<?php
$arr = array(5 => 1, "y" => 2);

$arr[] = 56;    // This is the same as $arr[13] = 56;
// at this point of the script

$arr["x"] = 42; // This adds a new element to
// the array with key "x"
$arr[] = 45; // This adds a new element to

var_dump($arr);
?>
输出:array(5) { [5]=> int(1) ["y"]=> int(2) [6]=> int(56) ["x"]=> int(42) [7]=> int(45) }

可以看出,下标默认以索引值为基准,在最大的索引值上+1,自定义的string类型的key不会影响。

对于数组的基本理解于此,下一次将学习array相应的函数,这些函数的功能将大大简便我们对数组的操作。欢迎大家指正其中错误。p.s 例子参考下述资料,并亲测通过,部分代码稍作了修改。

参考资料:

PHP 手册     http://www.php.net/manual/zh/language.types.array.php#language.types.array.syntax.modifying

某一技术博客  http://www.cnblogs.com/confach/articles/470492.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息