2012-11-13 62 views
0

我已经在一个文件storred JSON数组看起来像:PHP json_encode和解码

["bla bla","bla bla2","bla bla3"] 

如果我想删除从JSON数组的代码,这些对象之一下面的JSON转换为另一种类型数组看起来像:

{"1":"bla bla","2":"bla bla2","3":"bla bla3"} 

我不希望这种情况发生,因为它搞砸了代码,在另一个地方。我怎样才能做到这一点?

$eng = json_decode($en_banners, false); 

unset($eng[$id]); 

$myFile = "languages/banners.php"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = "<?php \$de_banners='".json_encode($eng) 
+0

根据您的使用情况,您可能更喜欢'var_export'。 – Corbin

+0

尝试'json_decode($ blah,true)' - 将JSON解析为assoc数组而不是对象。 –

回答

2

JavaScript数组是从零开始所以有以创建一个PHP数组具有间隙的JavaScript数组,除非你填补国内空白没有可能的方式:

$en_banners = '["bla bla","bla bla2","bla bla3"]'; 
$eng = json_decode($en_banners, false); 
var_dump($eng); 
$id = 0; 
$eng[$id] = null; // Rather than: unset($eng[$id]); 
var_dump(json_encode($eng)); 

如果数组键不相关,则可以简单地忽略它们:

$en_banners = '["bla bla","bla bla2","bla bla3"]'; 
$eng = json_decode($en_banners, false); 
var_dump($eng); 
$id = 0; 
unset($eng[$id]); 
var_dump(json_encode(array_values($eng))); 

如果这些解决方案都不适用,我们需要更多的数据:)

+0

第一个让数组保留但是具有空值。 但第二个工作得很好!谢谢! :) –

+0

那是因为你不能有空隙!很高兴帮助。 –

2

设置你的json_decode假为真.. 如果假的解码器,使PHP对象,如果其真正的它使从JSON PHP阵..

$eng = json_decode($en_banners, TRUE); 

是json_encode将PHP之后对象JSON对象,PHP数组到JSON数组..

PS

未设置附加后...

$eng = array_values($eng); 

清理数组键

$eng = json_decode($en_banners, TRUE); 

unset($eng[$id]); 
$eng = array_values($eng); 
$myFile = "languages/banners.php"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = "<?php \$de_banners='".json_encode($eng); 
+0

不,问题仍然存在! :( –

+0

看起来应该是这样的,如果你正在访问'$ eng ['some_string']'将它变成一个对象,可能会发生一些奇怪的事情。 – bdares

+0

@bdares在它的$ eng [$ id]的例子中,所以我不要认为字符串:) – Svetoslav