如何将 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_usersaldoalamat 到单个 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);
  }