合并php中while循环创建的json数组,从数据库中获取值


Merge json arrays created by a while loop in php, fetching values from a database

每次while循环从数据库中运行提取时,我都会得到两个需要合并的JSON数组。这是我现在得到的结构数组结果:

{id=1,cid=1,fname=Lorna,vorname=King,gender=female,dob=1985,company=helsana,monthly_amount=150},
{id=2,cid=1,fname=Brian,vorname=King,gender=male,dob=2007,company=helsana,monthly_amount=100}

我需要它看起来像这样:

{id={1,2},cid={1,1},fname={Lorna,Brian},vorname={King,King},gender={female,male},dob={1985,2007},company={helsana,helsana},monthly_amount={150,100}}

以下是我正在使用的PHP代码:

<?php
include_once "conn.php";
$show= $mysqli->query("SELECT id,cid,fname,vorname,gender,dob,company,monthly_amount FROM family where cid = '1' ");
$arr = array();
while($row = $show->fetch_assoc()){
    $arr[] = $row;
}
$json_response = json_encode($arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
echo $str = substr($json_response, 1,-1);
?>

我对这个有点陌生,请有人帮我。

您可以使用PHP中的新array_column函数来获得所需内容。请注意,JSON的结构为{id=[1,2],cid=[1,1],fname=[Lona,Brian]…所以[]而不是{}

<?php
  include_once "conn.php";
  $show= $mysqli->query("SELECT id,cid,fname,vorname,gender,dob,company,monthly_amount FROM           family where cid = '1' ");
  $arr = array();
  while($row = $show->fetch_assoc()){ $arr[] = $row; } 
//
$final = array();
foreach ( array_keys($arr[0]) as $fieldName){
    $final[$fieldName] = array_column($arr, $fieldName);
}
$json_response =  json_encode($final,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
echo $str = substr($json_response, 1,-1);
?>

我强烈建议您不要这样问。这些结果是分开的,这是有充分理由的。

无论如何,这里有一种方法可以回答你的问题,但再次,除非你有特定的原因想要这样做,所以我会考虑你是如何处理JSON的。

在这里,我只是使用第一行来设置数组,然后手动连接数据。

<?php
include_once "conn.php";
$show= $mysqli->query("SELECT id,cid,fname,vorname,gender,dob,company,monthly_amount FROM           family where cid = '1' ");
$arr = array();
$arr[] = $show->fetch_assoc();
while($row = $show->fetch_assoc()){
  $arr['id'] .= ',' . $row['id'];
  $arr['cid'] .= ',' . $row['cid'];
  $arr['dob'] .= ',' . $row['dob'];
  $arr['company'] = ',' . $row['company'];
  $arr['monthly_amount'] = ',' . $row['monthly_amount'];
  $arr['vorname'] = ',' . $row['vorname'];
  $arr['fname'] = ',' . $row['fname'];
} 
$json_response = json_encode($arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
echo $str = substr($json_response, 1,-1);