while ($x <= $until) {
    /* baris data sesuai index */
    if ($x > 0 && ($row = $rows[$x])) {
        $first = array_shift(array_keys($row['tarif']));
        // ambil array key elemen pertama
        $count = count($row['tarif']);
        // jumlah data tarif
        foreach ($row['tarif'] as $layanan => $tarif) {
            /* buat output table baris */
            $etd = isset($tarif['etd']) ? $tarif['etd'] : 'N/A';
            if ($first == $layanan) {
                $output .= '
					<tr>
						<td rowspan="' . $count . '" class="row-center">' . $row['provinsi'] . '</td>
						<td rowspan="' . $count . '" class="row-center">' . JNE_normalize($row['kota']) . '</td>
						<td rowspan="' . $count . '" class="row-center">' . JNE_normalize($row['kecamatan']) . '</td>
						<td class="text-center">' . strtoupper($layanan) . '</td>
						<td class="text-center">' . JNE_rupiah($tarif['harga']) . '</td>
						<td class="text-center">' . $etd . '</td>
					</tr>';
            } else {
                $output .= '
					<tr>
						<td class="text-center">' . strtoupper($layanan) . '</td>
						<td class="text-center">' . JNE_rupiah($tarif['harga']) . '</td>
						<td class="text-center">' . $etd . '</td>
					</tr>';
            }
        }
    }
    $x++;
function get_city_state($index)
{
    global $jne;
    $data = $jne->getData();
    if ($city = $data[$index]) {
        return JNE_normalize(sprintf('%s, %s', trim($city['kecamatan']), $city['kota']));
    }
    return $index;
}
 public function getProvinces()
 {
     $this->_provinces = array_unique(array_map(function ($k) {
         return JNE_normalize(array_pop(array_values(array_intersect_key($k, array_flip(array('provinsi'))))));
     }, $this->_data));
     return $this->_provinces;
 }
function get_city_state($index)
{
    global $jne;
    $data = $jne->getRows();
    $filtered = array_filter($data, function ($rows) use($index) {
        return $rows['index'] == $index;
    });
    if ($filtered) {
        $state = array_pop($filtered);
        return JNE_normalize(sprintf('%s, %s', trim($state['kecamatan']), $state['kotamadya']));
    }
    return $index;
}