-1

I have create json array in array, using php array unserialize and serialize, array unique, but i do not want product array have object "0" "1" and so on in front of it if more than 3

I want to have an output like this :

`

{
    "pesanan": [
        {
            "id_pesanan": "59",
            "id_user": "39",
            "id_beli": "29500075",
            "id_bank": "8",
            "kode_pesanan": "BRO-AHP5-170917-51SY",
            "tgl_pesanan": "2017-09-17 06:38:35",
            "harga_pesanan": "266000",
            "harga_ongkir": "16000",
            "kurir_pengiriman": "J&T Express REG",
            "status_pesanan": "pending",
            "produk": [
                {
                    "nama_produk": "Kartu Ucapan",
                    "id_pesanan": "295035434"
                },
                {
                    "nama_produk": "Kartu Ucapan",
                    "id_pesanan": "295035434"
                },
                {
                    "nama_produk": "Square Card",
                    "id_pesanan": "295035312"
                },
                {
                    "nama_produk": "Square Card",
                    "id_pesanan": "295035312"
                },
                {
                    "nama_produk": "Kartu Nama",
                    "id_pesanan": "295035220"
                }
            ]
        }
    ],
    "success": "1"
}

`

but i have an output like this :

` "pesanan": [
        {
            "id_pesanan": "59",
            "id_user": "39",
            "id_beli": "29500075",
            "id_bank": "8",
            "kode_pesanan": "BRO-AHP5-170917-51SY",
            "tgl_pesanan": "2017-09-17 06:38:35",
            "harga_pesanan": "266000",
            "harga_ongkir": "16000",
            "kurir_pengiriman": "J&T Express REG",
            "status_pesanan": "pending",
            "produk": {
                "0": {
                    "nama_produk": "Kartu Ucapan",
                    "id_pesanan": "295035434"
                },
                "2": {
                    "nama_produk": "Square Card",
                    "id_pesanan": "295035312"
                },
                "4": {
                    "nama_produk": "Kartu Nama",
                    "id_pesanan": "295035220"
                }
            }
        }
    ],
    "success": "1"
}`

This my php code :

`

<?php 
    require_once('include/db_connect.php');

    $sql = "SELECT * FROM `pesanan` ORDER BY id_pesanan DESC";

    $response = mysqli_query($con, $sql);

    if (mysqli_num_rows($response) > 0 ) {

        $result = array();
        $result ["pesanan"] = array();


        while ($data = mysqli_fetch_assoc($response)) {

            $h['id_pesanan']        = $data['id_pesanan'];
            $h['id_user']           = $data['id_alamat'];
            $h['id_beli']           = $data['id_beli'];
            $h['id_bank']           = $data['id_bank'];
            $h['kode_pesanan']      = $data['kode_pesanan'];
            $h['tgl_pesanan']       = $data['tanggal_pesanan'];
            $h['harga_pesanan']     = $data['harga_pesanan'];
            $h['harga_ongkir']      = $data['harga_ongkir'];
            $h['kurir_pengiriman']  = $data['kurir_pengiriman'];
            $h['status_pesanan']    = $data['status_pesanan'];
            $id_beli                = $data['id_beli'];


                    $sql2= mysqli_query($con, "SELECT * FROM `keranjang` 
                                    INNER JOIN `produk`
                                    ON keranjang.`id_produk` = produk.`id_produk` 
                                    INNER JOIN `pesanan_file`
                                    ON keranjang.`id_pesanan` = pesanan_file.`id_pesanan`
                                    WHERE keranjang.`id_beli`='".$id_beli."' ");

                    /*$h["produk"] = array();*/

                    $produk = array();

                    while ($data2 = mysqli_fetch_array($sql2)) {


                        $produk[] = array('nama_produk' => $data2['nama_produk'] , 'id_pesanan' => $data2['id_pesanan'],);


                            $h["produk"] = array_map("unserialize", array_unique(array_map("serialize", $produk)));
                }

            array_push($result["pesanan"], $h);


         } 


         $result["success"] = "1";
          echo json_encode($result);


    }else {

        $result["success"] = "0";
         echo json_encode($result);
    }



?>`

any help would be greatly appreciated

1 Answers1

0

Your use of array_unique removes the array values that are the same (leaving only the first instance), however it also kills the numeric keys in-between.

Your options are to remove the array_unique call and include the duplicate entries in the array or reset the array at the end:

<?php 
require_once('include/db_connect.php');

$sql = "SELECT * FROM `pesanan` ORDER BY id_pesanan DESC";

$response = mysqli_query($con, $sql);

if (mysqli_num_rows($response) > 0 ) {

    $result = array();
    $result ["pesanan"] = array();


    while ($data = mysqli_fetch_assoc($response)) {

        $h['id_pesanan']        = $data['id_pesanan'];
        $h['id_user']           = $data['id_alamat'];
        $h['id_beli']           = $data['id_beli'];
        $h['id_bank']           = $data['id_bank'];
        $h['kode_pesanan']      = $data['kode_pesanan'];
        $h['tgl_pesanan']       = $data['tanggal_pesanan'];
        $h['harga_pesanan']     = $data['harga_pesanan'];
        $h['harga_ongkir']      = $data['harga_ongkir'];
        $h['kurir_pengiriman']  = $data['kurir_pengiriman'];
        $h['status_pesanan']    = $data['status_pesanan'];
        $id_beli                = $data['id_beli'];


                $sql2= mysqli_query($con, "SELECT * FROM `keranjang` 
                                INNER JOIN `produk`
                                ON keranjang.`id_produk` = produk.`id_produk` 
                                INNER JOIN `pesanan_file`
                                ON keranjang.`id_pesanan` = pesanan_file.`id_pesanan`
                                WHERE keranjang.`id_beli`='".$id_beli."' ");

                /*$h["produk"] = array();*/

                $produk = array();

                while ($data2 = mysqli_fetch_array($sql2)) {


                    $produk[] = array('nama_produk' => $data2['nama_produk'] , 'id_pesanan' => $data2['id_pesanan'],);


                        $h["produk"] = array_map("unserialize", array_unique(array_map("serialize", $produk)));
            }

        // Reset array keys to fix items removed by array_unique
        $h['produk'] = array_values($h['produk']);

        array_push($result["pesanan"], $h);


     }


     $result["success"] = "1";
      echo json_encode($result);


}else {

    $result["success"] = "0";
     echo json_encode($result);
}



?>`
Jim
  • 3,210
  • 2
  • 17
  • 23