Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并php中while循环创建的json数组,从数据库中获取值_Php_Arrays_Json_While Loop - Fatal编程技术网

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

合并php中while循环创建的json数组,从数据库中获取值,php,arrays,json,while-loop,Php,Arrays,Json,While Loop,每次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} 我需要它看起来像

每次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);
?>

我郑重建议你不要这么问。有一个很好的理由可以解释为什么这些结果是分开的

无论如何,这里有一种方法来回答你的问题——但是,除非你想这样做的具体原因,否则我会考虑你是如何处理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);

您可以使用PHP中新的array\u column函数来获取所需内容。请注意,JSON的结构将是{id=[1,2],cid=[1,1],fname=[Lorna,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);

?>

你到底为什么要这样做?你基本上是在寻求帮助,完全破坏了你的数据!你是对的,它会破坏数据。我只希望数组的排列方式能让我选择每条记录以及与之相关的值。为什么你现在不能这样做呢?我认为没有必要对其进行透视。我实际上需要这种格式的数组{1={id:1,cid:1 fname=Lorna,vorname:King,性别:女性,出生日期:1985年,公司:helsana,每月金额:100},2={id:2,cid:1 fname=Brian,vorname:King,性别:男性,出生日期:2005年,公司:helsana,每月金额:150}。我正在努力想办法。嗯?这根本不是你在问题中要求的。你说得对。它会破坏数据。我只希望数组的排列方式我可以选择每条记录及其关联的值。你说得对。不建议将数据放在那种格式。我只希望数组的排列方式我可以选择可以选择每个记录及其关联的值。我需要它的格式为{1={id:1,cid:1 fname=Lorna,vorname:King,gender:femal,dob:1985,company:helsana,monthly_amount:100},2={id:2,cid:1 fname=Brian,vorname:King,gender:male,dob:2005,company:helsana,monthly_amount:150}。这是怎么做到的?@CalebNasio-这就是你已经拥有的。你正在编码一个数组,可以用JavaScript轻松解析。看看这里,希望你能看到发生了什么: