通过 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}]