Слияние массивов json, созданных циклом while в php, выборка значений из базы данных

Я получаю два массива JSON, которые мне нужно объединять каждый раз, когда цикл while запускает выборку из моей базы данных. Это результат массива структуры, который я получаю на данный момент:

{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);
?>

Я новичок в этом, пожалуйста, кто-нибудь, помогите мне.

0

Решение

Вы можете использовать новую функцию array_column из PHP, чтобы получить то, что вам нужно. Обратите внимание, что 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

Другие решения

Я бы настоятельно рекомендовал против того, что вы просите. Есть веская причина, почему эти результаты разные.

В любом случае, чтобы ответить на ваш вопрос, есть способ — но снова если нет конкретной причины, почему вы хотите этого, я бы вместо этого подумал о том, как вы обрабатываете 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);
0

По вопросам рекламы [email protected]