/** * Flatten a value for display * * @param mixed $value * @return string */ private static function flattenValue($value, $human_labels = array()) { if (is_scalar($value)) { return $value; } // Merge an array or object down. Doesn't look great past 2 levels of depth. $is_assoc = is_array($value) && (bool) count(array_filter(array_keys($value), 'is_string')); if ($is_assoc || is_object($value)) { foreach ($value as $key => $val) { $value[$key] = $key . ': ' . PrettyFormatter::flattenValue($val, $human_labels); } } $value = join(', ', (array) $value); return $value; }
/** * @param $data * @param $headers */ private function formatTable($data, $headers = null) { $table = new \cli\Table(); if ($headers) { $table->setHeaders($headers); } foreach ($data as $row_data) { $row = array(); foreach ((array) $row_data as $key => $value) { $value = PrettyFormatter::flattenValue($value); $row[] = $value; } $table->addRow($row); } // @TODO: This does not test well. PHPUnit uses output buffering. ob_start(); $table->display(); $out = ob_get_contents(); ob_end_clean(); return $out; }