예제 #1
0
파일: Writer.php 프로젝트: zircote/amqp
 /**
  * Write PHP array, as table. Input array format: keys are strings,
  * values are (type,value) tuples.
  *
  * @param $d
  *
  * @return Writer
  */
 public function writeTable($d)
 {
     $this->flushBits();
     $table_data = new Writer();
     foreach ($d as $k => $va) {
         list($ftype, $v) = $va;
         $table_data->writeShortStr($k);
         if ($ftype == 'S') {
             $table_data->write('S');
             $table_data->writeLongStr($v);
         } else {
             if ($ftype == 'I') {
                 $table_data->write('I');
                 $table_data->_writeSignedLong($v);
             } else {
                 if ($ftype == 'D') {
                     // 'D' type values are passed Decimal instances.
                     $table_data->write('D');
                     $table_data->writeOctet($v->e);
                     $table_data->_writeSignedLong($v->n);
                 } else {
                     if ($ftype == 'T') {
                         $table_data->write('T');
                         $table_data->writeTimestamp($v);
                     } else {
                         if ($ftype == 'F') {
                             $table_data->write('F');
                             $table_data->writeTable($v);
                         } else {
                             if ($ftype = 'A') {
                                 $table_data->write('A');
                                 $table_data->writeArray($v);
                             }
                         }
                     }
                 }
             }
         }
     }
     $table_data = $table_data->getvalue();
     $this->writeLong(strlen($table_data));
     $this->write($table_data);
     return $this;
 }