2015-06-22 76 views
0

看看下面的代码:json_decode - 强制数组键是字符串

$a = json_decode('{"0":"xy"}', true); 

这将返回一个关联数组一样[0 => "xy"]

有没有办法不是自动将键转换为数字?我想要的结果将是数组["0" => "xy"]以字符串作为唯一键。

+3

你为什么要这样做?那有什么问题? –

+0

这是Laravel Eloquent模型的一个属性。当模型转换为JSON时(例如,当API返回时)'[0 =>“xy”]'被转换为'[“xy”]'而不是正确的'{“0”:“xy”}' 。 – Mouagip

+0

你仍然可以得到密钥 –

回答

0

不太确定为什么你会希望数值数组键是字符串。当试图通过键搜索数组或重新输入数组时,它会使生活更加艰难。

但是,如果你真的想你的钥匙是串这应该有助于

$array = json_decode('{"0":"xy"}', true); 
foreach($array as $key => $value) { 
    $newArray[(string) $key] = $value; 
} 
+0

'strval'或'“$ key”'也应该有效。但在这里,我也需要递归遍历数组来手动转换所有的键。我希望为像'json_decode'这样的标志提供更多的“本地”方法。 – Mouagip

+0

没有一个本地方法,不是我所知。为什么你需要你的钥匙作为字符串?似乎有点奇怪,因为它们是数值...你从这样的练习中获得了什么? – hawkyhawk14

+0

重要的部分是它可以是任意数值(以任意顺序)。但是没关系,我现在决定改变底层的数据结构,而不是与'json_decode'拼争。 – Mouagip

2

首先解码它作为一个对象(不true参数),然后强制转换它作为数组:

$a = (array) json_decode('{"0":"xy"}'); 
var_dump($a); 

输出:

array (size=1) 
    '0' => string 'xy' (length=2) 
+0

这是个好主意。不幸的是我需要这个递归,所以我希望找到一个更“原生”的方法,不需要我遍历整个数组。 – Mouagip

相关问题