我正在尝试将数组中的json字符串转换为数组,
$config = array(
"type" => '{"category":"admin","page":"page"}',
"say" => "Hello",
"php" => array(
"say" => "no",
"type" => '{"category":"admin","page":"page"}',
"gran" =>array(
"name" => "Hi"
)
)
);
字符串
我的工作代码,
class objectify
{
public function json_to_array($array, $recursive = true)
{
# if $array is not an array, let's make it array with one value of former $array.
if (!is_array($array)) $array = array($array);
foreach($array as $key => $value)
{
if($recursive === false) $array[$key] = (!empty($value) && is_string($value) && json_decode($value) != NULL) ? json_decode($value, true): $value;
else $array[$key] = (!empty($value) && is_string($value) && json_decode($value) != NULL) ? json_decode($value, true): is_array($value) ? self::json_to_array($array) : $value;
}
return $array;
}
}
型
它工作得很好 * 没有 * 递归方法**,但当我想做递归时,你可以在上面的代码中看到,
$object = new objectify();
$config = $object->json_to_array($config);
print_r($config);
型
错误消息,
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2048 bytes) in C:\wamp\www\test\2012\php\set_variable.php on line 79
型
我只想得到这个结果,
Array
(
[type] => Array
(
[category] => admin
[page] => page
)
[say] => Hello
(
[say] => no
[type] => {"category":"admin","page":"page"}
[gran] => Array
(
[name] => Hi
)
)
)
型
编辑:
$config = 'type={"category":"admin","page":"page"}&text_editor={"name":"mce-basic"}&parent_id=self&subtitle=true&description=true&content_1=true&script_1=true&primary_image=true';
parse_str($config,$array);
print_r($array);
型
结果表明,
Array
(
[type] => {"category":"admin","page":"page"}
[text_editor] => {"name":"mce-basic"}
[parent_id] => self
[subtitle] => true
[description] => true
[content_1] => true
[script_1] => true
[primary_image] => true
)
型
8条答案
按热度按时间yizd12fk1#
快速解决方案:
字符串
如果不是所有的参数都是JSON,并且你想要实际的数组而不是
stdClass
对象,你可能必须这样做:型
如果你在JSON之外有更多层次的嵌套数组,那么你必须自己做递归。试试这个版本的objectify:
型
这对我来说在你的两组样本数据上都很有效。
hgqdbh6s2#
就您的代码而言,您似乎犯了一个错误,导致它永远循环(递归部分的最后一部分):
字符串
您将整个数组而不是测试为数组的值馈送给递归函数。
将其更改为:
型
应该能解决。
**编辑:**看起来是嵌套的三元条件导致了问题,如果你在第二个条件周围加上大括号,它会起作用:
型
See the working example的一个。
h22fl7wq3#
如果你想递归地转换所有的json,你需要把json_decode的第二个参数设置为true
字符串
e0uiprwp4#
就可以轻松得多完成。
字符串
dsekswqp5#
如果你使用的是laravel framework并且post参数包含数组,那么在array map中使用json_decode来解码递归值。
字符串
svgewumm6#
字符串
这将遍历父数组并递归地解码所有子元素json编码的数组。
6ovsh4lw7#
要递归地将json字符串转换为数组或对象,请使用以下函数,该函数通过引用修改输入数组/对象,替换json字符串,然后最终返回整个变异的有效负载。
从PHP8.3开始,
json_validate()
可以很容易地判断一个字符串是否是有效的json。这个原生函数只接受一个字符串作为它的第一个参数。我的函数被设计成动态地适应那些希望json字符串根据第二个参数变成对象或数组的调用。默认将json字符串转换成数组。
产品编号:(Demo)
字符串
35g0bw718#
你可以使用简单的功能:
字符串
地址:https://gist.github.com/victorbstan/744478
型