注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

简单说说PHP新建数组的方式  

2010-11-18 11:23:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
简单说说PHP新建数组的方式
一般情况下,使用PHP新建数组的方式有两种(由于时间关系,我这里直接上手册上的说明):

?一种是:可以用 语言结构来新建一个 array。它接受任意数量用逗号分隔的 键(key) => 值(value) 对。
array( key => value , ... ) // 键(key) 可是是一个 整数(integer) 或 字符串(string) // 值(value) 可以是任意类型的值
eg
<?php
$arr?=?array("foo"?=>?"bar",?12?=>?true);

echo?$arr["foo"];?//?bar
???????????????? echo?$arr[12];????//?1
?????????? ?>

第二种是:
通过在方括号内指定键名来给数组赋值实现的。也可以省略键名,在这种情况下给变量名加上一对空的方括号(“[]”)。
$arr[key] = value; $arr[] = value; // key 可以是 integerstring // value 可以是任意类型的值。如果 $arr 还不存在,将会新建一个。这也是一种定义数组的替换方法。要改变一个值,只要给它赋一个新值。如果要删除一个键名/值对,要对它用 。
eg
????????????? <?php
$arr?=?array(5?=>?1,?12?=>?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"

???????????????? unset($arr[5]);?//?This?removes?the?element?from?the?array

???????????????? unset($arr);????//?This?deletes?the?whole?array
?>


函数允许删除数组中的某个键。但要注意数组将不会重建索引。
eg
$a?=?array(1?=>?'one',?2?=>?'two',?3?=>?'three');
unset($a[2]);
???????????????????????????? /*?will?produce?an?array?that?would?have?been?defined?as
$a?=?array(1?=>?'one',?3?=>?'three');
and?NOT
$a?=?array(1?=>?'one',?2?=>'three');
*/

以上信息来至手册。

有了以上信息后,我们来谈谈”$foo[bar]问题。
实际上,手册上已有一篇”为什么 $foo[bar] 错了?“的说明文档,讲解的非常详细。我们来看看文档上的这两句话。
那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。

“它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,如果没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。 ”

这两句话说明了错误和“能运行(实际上会报Notice级别的错误)”的原因。那么,”$foo[bar]是怎么产生的呐?在实际工作中,可能会是以下情况产生。
一个是自己手写代码写上去的,比如 “$foo[branch_name] = 999;“这样运行代码,是报notice级别的错误信息。
二个是代码是程序自动生成,比如:
???? <?php
??? ??? $value = array(1,2,3);
??? ??? $field = array('branch_name','branch_ref','trading_name');
??? ??? foreach($field as $k=>$v){
??? ??? ??? ??? $value[$v] = $value[$k];
//$value["'".$v."'"] = $value[$k];这样处理将得不到预想要的结果
//$value['$v']????????? = $value[$k]; 这样处理将得不到预想要的结果
//$value["$v"]???????? = $value[$k]; 这样处理可以运行,但加上双引号是多余的
??? ??? ??? ??? //$value[branch_name] = 999;?? 这样写是完全错误的
??? ??? ??? ??? var_dump($value);
??? ??? }

? 运行段代码后,实际上不会报任何错误。可能大多数人会对”$value[$v] = $value[$k];“这行代码产生疑问。第一次echo $v 出来,显示的是字符是 branch_name,为什么没有报错呐?

第一:实事上,$V值是真正意义上的字符串(你可以var_dump出来看看),不是所谓的”裸字符串“,它自己有引号。

第二:运用手册上的一段话:这并不意味着总是给键名加上引号。用不着给键名为常量变量的加上引号,否则会使 PHP 不能解析它们。
  评论这张
 
阅读(169)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017