如何将 2 json 数据与具有不同键但相同值的 php 组合
how to combine 2 json data with php with different key but same value
当我意识到 Codeigniter 可以 运行 在单个服务器上使用单个 MySQL 查询而不是 运行 与 2 个不同的服务器同步时,我遇到了一些问题,所以我决定分开MySQL 结果为一个数组
这是我得到的样本 JSON 数据:
[{"id":"4416","id_user":"123@example.net","tagihan":"150000","tanggal":"2021-04-08 >00:00:00","tanggal_input":"Apr 14, 2020","metode":"CASH","bulan":"Apr->2021","tanggal_bayar":"14-Apr-2020","format_harga":"Rp 150,000"}]
[{"id":"1","username":"123@example"}]
这是来自 query->json
codeigniter
的数据 1
[{"id":"4416","id_user":"123@example.net","tagihan":"150000","tanggal":"2021-04-08 >00:00:00","tanggal_input":"Apr 14, 2020","metode":"CASH","bulan":"Apr->2021","tanggal_bayar":"14-Apr-2020","format_harga":"Rp 150,000"}]
这是数据2
[{"id":"1","username":"123@example","saldo":"1000000","alamat":"example"}]
如您所见id_user == with username
,如何将这些数据合并到单个键 id_user
和 saldo
、alamat
到单个 JSON 索引中?
public function getRekap(){
$this->db2->SELECT("*,DATE_FORMAT(tanggal, '%b-%Y') AS bulan, DATE_FORMAT(tanggal_input, '%d-%b-%Y') AS tanggal_bayar, concat('Rp ', format( tagihan, 0)) AS format_harga, date_format(tanggal_input,'%b %d, %Y') AS tanggal_input")
->FROM('pembayaran')
->ORDER_BY('tanggal_input','DESC');
$query = $this->db2->get();
$output = array('data' => array());
if($query->num_rows() > 0){
return $query->result_array();
}else{
return array();
}
}
public function getTest(){
$this->db->SELECT("id,username")
->FROM('usersinfo');
$query = $this->db->get();
$output = array('test' => array());
if($query->num_rows() > 0){
return $query->result_array();
}else{
return array();
}
}
public function getRekap()
{
$dataArray = array(
'data' => $this->Home_m->getRekap(),
'test' => $this->Home_m->getTest()
);
echo json_encode($dataArray);
}
我想要的只是结果与 MySQL 查询相同
其中 id_user = username;
我有两个代码供您使用,它们都可以使用。
首先你可以使用一次完成,只需使用连接。
public function getRekap()
{
$this->db2->SELECT("pembayaran.*,DATE_FORMAT(pembayaran.tanggal, '%b-%Y') AS bulan, DATE_FORMAT(pembayaran.tanggal_input, '%d-%b-%Y') AS tanggal_bayar, concat('Rp ', format( pembayaran.tagihan, 0)) AS format_harga, date_format(pembayaran.tanggal_input,'%b %d, %Y') AS tanggal_input, usersinfo.id as usersinfo_id,usersinfo.username")
->FROM('pembayaran')
->join('usersinfo', 'usersinfo.username = pembayaran.id_user', 'left')
->ORDER_BY('pembayaran.tanggal_input', 'DESC');
$query = $this->db2->get();
if ($query->num_rows() > 0) {
return $query->result_array();
} else {
return array();
}
}
或者你也可以使用这个方法。
public function getRekap()
{
$rekaps = $this->Home_m->getRekap();
$tests = $this->Home_m->getTest();
foreach ($rekaps as $rekap) {
$newData['id'] = $rekap['id'];
$newData['id_user'] = $rekap['id_user'];
$newData['tagihan'] = $rekap['tagihan'];
$newData['tanggal'] = $rekap['tanggal'];
$newData['tanggal_input'] = $rekap['tanggal_input'];
$newData['metode'] = $rekap['metode'];
$newData['bulan'] = $rekap['bulan'];
$newData['tanggal_bayar'] = $rekap['tanggal_bayar'];
$newData['format_harga'] = $rekap['format_harga'];
foreach ($tests as $test) {
if ($rekap['id_user'] == $test['username']) {
$newData['username'] = $test['username'];
$newData['saldo'] = $test['saldo'];
$newData['alamat'] = $test['alamat'];
}
}
$data[] = $newData;
}
echo json_encode($data);
}
当我意识到 Codeigniter 可以 运行 在单个服务器上使用单个 MySQL 查询而不是 运行 与 2 个不同的服务器同步时,我遇到了一些问题,所以我决定分开MySQL 结果为一个数组
这是我得到的样本 JSON 数据:
[{"id":"4416","id_user":"123@example.net","tagihan":"150000","tanggal":"2021-04-08 >00:00:00","tanggal_input":"Apr 14, 2020","metode":"CASH","bulan":"Apr->2021","tanggal_bayar":"14-Apr-2020","format_harga":"Rp 150,000"}]
[{"id":"1","username":"123@example"}]
这是来自 query->json
codeigniter
[{"id":"4416","id_user":"123@example.net","tagihan":"150000","tanggal":"2021-04-08 >00:00:00","tanggal_input":"Apr 14, 2020","metode":"CASH","bulan":"Apr->2021","tanggal_bayar":"14-Apr-2020","format_harga":"Rp 150,000"}]
这是数据2
[{"id":"1","username":"123@example","saldo":"1000000","alamat":"example"}]
如您所见id_user == with username
,如何将这些数据合并到单个键 id_user
和 saldo
、alamat
到单个 JSON 索引中?
public function getRekap(){
$this->db2->SELECT("*,DATE_FORMAT(tanggal, '%b-%Y') AS bulan, DATE_FORMAT(tanggal_input, '%d-%b-%Y') AS tanggal_bayar, concat('Rp ', format( tagihan, 0)) AS format_harga, date_format(tanggal_input,'%b %d, %Y') AS tanggal_input")
->FROM('pembayaran')
->ORDER_BY('tanggal_input','DESC');
$query = $this->db2->get();
$output = array('data' => array());
if($query->num_rows() > 0){
return $query->result_array();
}else{
return array();
}
}
public function getTest(){
$this->db->SELECT("id,username")
->FROM('usersinfo');
$query = $this->db->get();
$output = array('test' => array());
if($query->num_rows() > 0){
return $query->result_array();
}else{
return array();
}
}
public function getRekap()
{
$dataArray = array(
'data' => $this->Home_m->getRekap(),
'test' => $this->Home_m->getTest()
);
echo json_encode($dataArray);
}
我想要的只是结果与 MySQL 查询相同
其中 id_user = username;
我有两个代码供您使用,它们都可以使用。
首先你可以使用一次完成,只需使用连接。
public function getRekap()
{
$this->db2->SELECT("pembayaran.*,DATE_FORMAT(pembayaran.tanggal, '%b-%Y') AS bulan, DATE_FORMAT(pembayaran.tanggal_input, '%d-%b-%Y') AS tanggal_bayar, concat('Rp ', format( pembayaran.tagihan, 0)) AS format_harga, date_format(pembayaran.tanggal_input,'%b %d, %Y') AS tanggal_input, usersinfo.id as usersinfo_id,usersinfo.username")
->FROM('pembayaran')
->join('usersinfo', 'usersinfo.username = pembayaran.id_user', 'left')
->ORDER_BY('pembayaran.tanggal_input', 'DESC');
$query = $this->db2->get();
if ($query->num_rows() > 0) {
return $query->result_array();
} else {
return array();
}
}
或者你也可以使用这个方法。
public function getRekap()
{
$rekaps = $this->Home_m->getRekap();
$tests = $this->Home_m->getTest();
foreach ($rekaps as $rekap) {
$newData['id'] = $rekap['id'];
$newData['id_user'] = $rekap['id_user'];
$newData['tagihan'] = $rekap['tagihan'];
$newData['tanggal'] = $rekap['tanggal'];
$newData['tanggal_input'] = $rekap['tanggal_input'];
$newData['metode'] = $rekap['metode'];
$newData['bulan'] = $rekap['bulan'];
$newData['tanggal_bayar'] = $rekap['tanggal_bayar'];
$newData['format_harga'] = $rekap['format_harga'];
foreach ($tests as $test) {
if ($rekap['id_user'] == $test['username']) {
$newData['username'] = $test['username'];
$newData['saldo'] = $test['saldo'];
$newData['alamat'] = $test['alamat'];
}
}
$data[] = $newData;
}
echo json_encode($data);
}