奇怪的php,不可以用each($form)[0]这样的写法么?

macker0030 2007-11-26 06:29:11

<?php
$arr=array('username'=>'John');

$value=each($arr)[1];
$key=each($arr)[0];

echo "$key=$value";
?>


为什么这样的写法,each($arr)[1] 会报语法错误?each($arr)不是返回一个数组么?
如果我不要使用临时变量,有没有别的办法?

希望大家帮我解答一下。

最近才接触php,感觉php的脚本味太浓了,语言上的一些设计貌似不是很优美。
...全文
232 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
macker0030 2007-12-01
  • 打赏
  • 举报
回复
谢谢各位的回复,受教了。

不过楼上好像有几位都在讨论这个数组或者是each的问题,其实我真正想讨论的并不是运行时错误,而是语法上的错误。就像ShadowSniper 说的 $var = functionname()[0]; 这种写法也不可以。

只所以有这样的问题,是因为前几天试着反编了一个zend加密过的php文件,看到里面有个函数,就有这样的代码each($cursor)[0],但报了语法错误。我想Zend Guard在加密php的时候,应该做了优化,也许这是优化过的脚本反编后的结果。所以很想知道有没有变通的做法,能实现这种写法。


好了,不钻牛角了,既然这种写法php不支持,那还是老老实实用变量罢。
blacker 2007-11-29
  • 打赏
  • 举报
回复
因为每次调用都移动指针,所以应该先赋一个临时变量过去,再用楼主的办法调用。

这和以前的文件记录读取函数是一样的,跟php的脚本特性没任何一点的联系啊。
blacker 2007-11-29
  • 打赏
  • 举报
回复
你第一次用each已经移动了指针
等你第二次用,指针到底了,再移就出错了。


<?php
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
?>


$bar now contains the following key/value pairs:


Array
(
[1] => bob
[value] => bob
[0] => 0
[key] => 0
)
blacker 2007-11-29
  • 打赏
  • 举报
回复
Each:
Returns the current key and value pair from the array array and advances the array cursor.

楼主没好好看手册
an9ryfr09 2007-11-28
  • 打赏
  • 举报
回复
关于这种用法我以前也有过倾向,
自己写的一个函数返回一个数组。我就用$var = functionname()[0];这种写法,结果发现不可以这样写。
ashchen 2007-11-28
  • 打赏
  • 举报
回复
php不是别的语言,每种语言都有自己的规则,不要指望所有的语言都兼容一个模式,Ok ?
shanshuiboy 2007-11-28
  • 打赏
  • 举报
回复
LZ,程序好没?
ashchen 2007-11-28
  • 打赏
  • 举报
回复
这样理解,函数的返回值并不是一个变量,而[]只能用在变量后面
fxs_2008 2007-11-28
  • 打赏
  • 举报
回复
其实就是不要凡事相当然
yu_er 2007-11-28
  • 打赏
  • 举报
回复
也許可以用其他方式代替
fxs_2008 2007-11-28
  • 打赏
  • 举报
回复
支持7楼的说法
请楼主看看手册,看each返回的是什么?
好象不是数组,只是数组的一条记录指针
如果$a不是数组,$a[0],$a[1],这样能表示吗?
my_web 2007-11-27
  • 打赏
  • 举报
回复
<?php
$arr=array('username'=>'John');

$value=each($arr);
//$key=each($arr);

echo $value[0];
echo $value[1];
?>
macker0030 2007-11-27
  • 打赏
  • 举报
回复
老大,PHP毕竟不是你研发的,它虽然灵活,但是还没有灵活到你写的那个程序。
-----------------------------------------------------------------------------
//这种写法难道很奇怪?我接触的其它语言都支持这种写法,(C\VB\JS\C#), 注意each($arr)返回的是一个数组,里面有两个元素,既然它是数组,后面用[]来取元素理论上不是很正常么?
我觉得php奇怪,也不光是数组,还有如 foo=>bar() 如果bar()返回的是一个对象,那么它应该有自己的方法,比如fun()吧,但好像用foo=>bar()=>fun()这样的写法也不行,而这在其它语言里也是完全可行的。

感谢各位的回复,boywind,list()应该好用。 chris_mao,您好像看错了each与echo;my_web 您写的这个就是我说的用了中间变量,我要讨论的就是能不能不用。
总哈哈 2007-11-27
  • 打赏
  • 举报
回复
老大,PHP毕竟不是你研发的,它虽然灵活,但是还没有灵活到你写的那个程序。
禹爸爸 2007-11-26
  • 打赏
  • 举报
回复
你这句代码只是像数据变量中添加了一个元素,可以用0索引,用1索引肯定会出错的呀,因为上界溢出。
$key = echo ($arr)[0];
$value = echo $arr[$key];
echo "$key = $value";

boywind 2007-11-26
  • 打赏
  • 举报
回复
啊 错了

<?php
$arr=array('username'=> 'John');

while (list($key, $val) = each($arr)) {
echo "$key => $val\n";
}
?>
boywind 2007-11-26
  • 打赏
  • 举报
回复
试试这个~
<?php
$arr=array('username'=>'John');

while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
?>

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧