通过 JSON 将 PHP 中的数字索引关联数组转换为有效的 JavaScript 对象
convert numerically indexed associative-array in PHP, to valid JavaScript Object via JSON
假设您有一个如下所示的数字索引数组(通过 RedBeanPHP's
find
操作获得):
[
[33=>["name"=>"John", "age"=25]],
[55=>["name"="Jane", "age"=23]]
]
其中 33 和 55 是 2 "beans"(基本上是关联数组)中的每一个的 id's
。
并且您想将数组转换为 JSON,以便可以将其发送到 JavaScript 客户端并将那里的数据用作 JavaScript 对象。
但是你不能简单地 JSON_encode
这个,因为你最终会在 JavaScript 对象中使用数字键,而 JavaScript 不喜欢那样。
你可以使用什么策略通过JSON将该数组转换为JavaScript对象,以便所有数据(包括每个bean的id
)在JavaScript结束? (对于那里的 RedBeanPHP
人:我希望有一种我还没有找到的本机 RedBeanPHP
方法来做到这一点。)
一个选项是使用 array_map
遍历数组。使用 array_values
从数组中获取所有值并按数字索引数组。
$arr = [
[33=>["name"=>"John", "age"=>25]],
[55=>["name"=>"Jane", "age"=>23]]
];
$result = array_map(function($o){
return array_values($o)[0];
}, $arr);
echo json_encode( $result );
这将导致:
[{"name":"John","age":25},{"name":"Jane","age":23}]
对于你的关联数组:
$array = array(33 => array("name" => "John", "age" => 25), 55 => array("name" => "Jane", "age" => 23));
PHP json_encode 函数:
$good_json = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
为 JavaScript 对象(字符串 "name" : 值对)生成 JSON:
{"33":{"name":"John","age":25},"55":{"name":"Jane","age":23}}
简单。你应该试试这个。首先遍历外部数组并在其中获取键,即数据的 id
。将 id
添加到其他值并将该数组推入结果数组。
$result = array();
$arr = [[33=>["name"=>"John", "age"=>25]],[55=>["name"=>"Jane", "age"=>23]]];
foreach ($arr as $ar) {
foreach ($ar as $key => $value) {
$value['id'] = $key;
array_push($result, $value);
}
}
echo json_encode($result);
输出:-
[{"name":"John","age":25,"id":33},{"name":"Jane","age":23,"id":55}]
假设您有一个如下所示的数字索引数组(通过 RedBeanPHP's
find
操作获得):
[
[33=>["name"=>"John", "age"=25]],
[55=>["name"="Jane", "age"=23]]
]
其中 33 和 55 是 2 "beans"(基本上是关联数组)中的每一个的 id's
。
并且您想将数组转换为 JSON,以便可以将其发送到 JavaScript 客户端并将那里的数据用作 JavaScript 对象。
但是你不能简单地 JSON_encode
这个,因为你最终会在 JavaScript 对象中使用数字键,而 JavaScript 不喜欢那样。
你可以使用什么策略通过JSON将该数组转换为JavaScript对象,以便所有数据(包括每个bean的id
)在JavaScript结束? (对于那里的 RedBeanPHP
人:我希望有一种我还没有找到的本机 RedBeanPHP
方法来做到这一点。)
一个选项是使用 array_map
遍历数组。使用 array_values
从数组中获取所有值并按数字索引数组。
$arr = [
[33=>["name"=>"John", "age"=>25]],
[55=>["name"=>"Jane", "age"=>23]]
];
$result = array_map(function($o){
return array_values($o)[0];
}, $arr);
echo json_encode( $result );
这将导致:
[{"name":"John","age":25},{"name":"Jane","age":23}]
对于你的关联数组:
$array = array(33 => array("name" => "John", "age" => 25), 55 => array("name" => "Jane", "age" => 23));
PHP json_encode 函数:
$good_json = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
为 JavaScript 对象(字符串 "name" : 值对)生成 JSON:
{"33":{"name":"John","age":25},"55":{"name":"Jane","age":23}}
简单。你应该试试这个。首先遍历外部数组并在其中获取键,即数据的 id
。将 id
添加到其他值并将该数组推入结果数组。
$result = array();
$arr = [[33=>["name"=>"John", "age"=>25]],[55=>["name"=>"Jane", "age"=>23]]];
foreach ($arr as $ar) {
foreach ($ar as $key => $value) {
$value['id'] = $key;
array_push($result, $value);
}
}
echo json_encode($result);
输出:-
[{"name":"John","age":25,"id":33},{"name":"Jane","age":23,"id":55}]