PHP 7.1 数组兼职竟然可以重复,如何去掉这个特性?

2017-01-19 12:58:50 +08:00
 ioioioioioioi
$a['test'] = 'hi';
$a['test'] = 'hello';

得到的结果是
[
    [test] => hi
    [test] => hello
]
而我实际想要的是:
[
    [test] => hello
]
5576 次点击
所在节点    PHP
64 条回复
zi
2017-01-19 15:59:41 +08:00
@ioioioioioioi 我也无法复现

~# php test.php
<pre>Array
(
[meta_description] => tom
)
</pre>

~# php -v
PHP 7.1.0 (cli) (built: Dec 2 2016 15:44:02) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
ioioioioioioi
2017-01-19 16:00:04 +08:00
@Roope 晕了,我再去测测看,我的 PHP 有问题?
HanSonJ
2017-01-19 16:00:28 +08:00
@ioioioioioioi http://imgur.com/a/uqeGQ 你应该是用了假的编辑器和解析器解析了一个假的 PHP ,所以给了一个假的结果
moult
2017-01-19 16:02:07 +08:00
楼主在下面再来几句代码!我就不信 KEY 是一样的。老衲不信这个邪了。
foreach($ret as $key=>$value){
var_dump($key);
var_dump(bin2hex($key));
}
lyragosa
2017-01-19 16:02:52 +08:00
楼主你这是要搞大新闻啊……
ioioioioioioi
2017-01-19 16:04:16 +08:00
@qiayue 新建文件测试确实没有重复了,可能如你所说,含有隐藏字符,这个是哥哥语言的翻译键值,或许是加其他语言翻译导致的,感谢,我再具体看看
haiyang416
2017-01-19 16:10:00 +08:00
@ioioioioioioi 你可能装了假 PHP7 ,我测试本地后还专门去网上找各个 PHP sandbox 粘帖运行你给出的代码,结果全是:
<pre>Array
(
[meta_description] => tom
)
</pre>

没有复现,没办法。
ioioioioioioi
2017-01-19 16:28:16 +08:00
@haiyang416 嗯,感谢,那应该是隐藏字符吧。
mko0okmko0
2017-01-19 16:53:40 +08:00
重复使用的 key 就用一个变数存起来吧.重复使用$k 的方式可避免手残输入了神奇的文字.
kaneg
2017-01-19 16:56:57 +08:00
或者是里面的字符看起来一样,其实不一样,我就被这两个坑过:[…] 和 [...]
realpg
2017-01-19 17:01:31 +08:00
@ioioioioioioi
报一下你的 PHP 版本, PHP 安装方式
gouchaoer
2017-01-19 17:03:39 +08:00
可能是 linux 下带了\r 之类的,你比较一下两个 key 肯定不一样,退一万步。。。 array 本质上是 hash , key 怎么可能相同
bianhua
2017-01-19 17:05:40 +08:00
楼主,建议你将出错的文件上传一下,这样大家可以帮你分析一下到底是怎么回事。
void1900
2017-01-19 17:34:38 +08:00
哈哈哈 sublime 这些隐藏字符会标出来~ 安利一波
shiny
2017-01-19 17:53:52 +08:00
@ioioioioioioi 我用 Docker 升级到 PHP7.1.0 来执行你的代码,并没有重现出你的结果。
shiny
2017-01-19 17:55:05 +08:00
建议你用能显示隐藏字符的编辑器查看下你本地的源码。
flyingghost
2017-01-19 17:55:45 +08:00
用 010editor 等 16 进制编辑器打开你的源码找找隐藏字符?
youxiachai
2017-01-19 20:34:22 +08:00
不可见字符....
ioioioioioioi
2017-01-19 20:36:35 +08:00
@mko0okmko0
@kaneg
@realpg
@gouchaoer
@bianhua
@void1900
@shiny
@flyingghost

系统是 ubuntu16.04 , php7 ,法国源

meta_description 是内部用户输入的键值,是各个翻译语言的键值,我上面贴出的结果,确实是我测试代码出的结果,但是后来 comment/uncomment 后测试又没有了,但是正式的代码,还是有重复的键值。哎,也不折腾了,通过对 meta_description 做特别处理解决了,不信还有第二个键值重复。能解释通的估计就是内部用户输入的键值 meta_description 含有隐藏字符了。
Array
(
[meta_description] => meta_description
[meta_description] => tom
)
realpg
2017-01-19 20:39:19 +08:00
@ioioioioioioi 请将能复现的数组按照 24 楼输出一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/335582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX