php - 使用 while 循环对多维数组进行编码
问题描述
我有一个多维数组,我希望使用 PHP 像这样打印它,但是没有逗号分隔花括号}{
,它应该像},{
. 你们能帮帮我吗?
{"user_activity": [{
"log_number": "1",
"log_user_1": "w120511891",
"log_activity_id": "A0002DOC",
"log_user_2": "",
"log_document_id": "DSX00012",
"log_material_id": "",
"log_timestamp": "2021-10-23 13:52:35",
"log_rand_key": "127",
"log_hash_key": "09c7e3bb5d6f74c257aa4b4cdae388a69177c7dc",
"log_project_id": "1520002",
"log_number_reference": "",
"log_close": "1"
}{
"log_number": "9",
"log_user_1": "W201005911",
"log_activity_id": "A0004DOC",
"log_user_2": "",
"log_document_id": "DSX00012",
"log_material_id": "",
"log_timestamp": "2021-10-25 10:35:29",
"log_rand_key": "127",
"log_hash_key": "d04e8d1ef5c9f8b85a3f7556b92d6a7fcdc11639",
"log_project_id": "1520002",
"log_number_reference": "1",
"log_close": "1"
}]}
这是我的 PHP 代码
echo "{\"user_activity\": [";
while($rsel_userAct_p = mysqli_fetch_array($xsel_userAct_p, MYSQLI_ASSOC)) {
print_r(json_encode($rsel_userAct_p), JSON_PRETTY_PRINT);
}
echo "]}";
解决方案
您的问题是您首先使用的是 print_r 。print_r 旨在打印出一种非常特殊的格式,该格式有助于数组结构,但与 json 无关。
<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>
将导致
大批 ( [a] => 苹果 [b] => 香蕉 [c] => 数组 ( [0] => x 1 => 是 [2] => z ) )
您真正想要的(至少从您的代码示例中猜测)是您想要打印出一个 json 对象,该对象由您的数据库中的多个结果组成,基于您之前获得的数组结果。
因此,您无需使用当前代码,而是首先创建一个适当的数组结构,然后使用给定的 json 函数将其打印出来。
$activities = [
'user_activity' => []
];
while($rsel_userAct_p = mysqli_fetch_array($xsel_userAct_p, MYSQLI_ASSOC)) {
$activities['user_activity'][] = $rsel_userAct_p;
}
echo json_encode($activities, JSON_PRETTY_PRINT);
实际结果应该与您想要的结果完全一样,并且无论数据库中的条目数量如何都可以正常工作。
推荐阅读
- django - 在 django-simple-jwt 包中,如何根据不同的签名算法和密钥有条件地验证密码?
- gerrit - How and When to use Follow Up feature of Gerrit efficiently?
- java - 如何在 Spring Boot 中使端点初始化异步?
- python - Change Bot From Hashtag To URL Tweepy
- javascript - Stuck on creating a preliminary tic tac toe board that places an 'x' in square you click. How do I combine previous board with current board?
- sql-server - Non-dynamic way to change sql_variant collation and keep type and size
- arrays - AngularJS array iterate object and compare strings inside it
- javascript - StencilJS 的 Watch 装饰器不使用对象数组触发
- laravel - laravel 8x livewire 在使用 livewire 时给出未定义的变量
- flutter - 颤振无法加载资产