Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_解码-强制数组键为字符串_Php_Json_Associative Array - Fatal编程技术网

Php json_解码-强制数组键为字符串

Php json_解码-强制数组键为字符串,php,json,associative-array,Php,Json,Associative Array,请看下面的代码: $a = json_decode('{"0":"xy"}', true); 这将返回一个关联数组,如[0=>“xy”] 有没有办法将按键自动转换为数字?我想要的结果是数组[“0”=>“xy”]以字符串作为唯一的键。不太清楚为什么要将数字数组键作为字符串。在尝试按键搜索数组或重新设置数组的键时,这可能会使操作更加困难 但是,如果您真的希望键是字符串,这应该会有所帮助 $array = json_decode('{"0":"xy"}', true); foreach($array

请看下面的代码:

$a = json_decode('{"0":"xy"}', true);
这将返回一个关联数组,如
[0=>“xy”]


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

不太清楚为什么要将数字数组键作为字符串。在尝试按键搜索数组或重新设置数组的键时,这可能会使操作更加困难

但是,如果您真的希望键是字符串,这应该会有所帮助

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

首先将其解码为对象(不带
true
参数),然后将其键入数组:

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

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

你为什么要这样?这有什么不对?这是拉威尔雄辩模型的一个特征。当模型转换为JSON(例如,当API返回时)
[0=>“xy”]
转换为
[“xy”]
,而不是正确的
{0:“xy”}
。您仍然可以获得键,然后以这个示例为例:
{0:“xy”,“2:“xy”}
。它将转换为
[0=>“xy”,2=>“xy”]
。当API返回时,这将依次编码为原始JSON。我希望两个例子(这个和我问题中的一个)的表现都一样。这是个好主意。不幸的是,我需要递归,所以我希望找到一个更“本机”的方法,它不需要我遍历整个数组。
strval
“$key”
也应该可以。但在这里,我也需要递归遍历数组,以手动转换所有键。我希望有一个更“本地”的方法,比如
json\u decode
的标志之类的。据我所知,没有本地方法。为什么你需要你的钥匙作为字符串?看起来有点奇怪,因为它们是数值…你从这样的练习中得到了什么?重要的是它可以是任意的数值(以任意顺序)。但没关系,我现在决定改变底层数据结构,而不是与
json\u decode
斗争。