$value) { if (is_string($key)) { $key = '\'' . $key . '\''; } switch (gettype($value)) { case 'array': $str .= $key . ' => ' . self::stringify($value) . ', '; break; case 'integer': case 'double': case 'float': $str .= $key . ' => ' . $value . ', '; break; case 'string': $str .= $key . ' => \'' . $value . '\'' . ', '; break; case 'object': $str .= $key . ' => ' . get_class($value['default']) . '()'; // TODO: implement object with parameters -> Reflection break; case 'boolean': $str .= $key . ' => ' . ($value['default'] ? 'true' : 'false') . ', '; break; case 'NULL': $str .= $key . ' => null, '; break; default: throw new \Exception('Unknown default type'); } } return $str . ']'; } /** * Convert array to csv string. * * @param array $data Data to convert * @param string $delimiter Delim to use * @param string $enclosure Enclosure to use * @param string $escape Escape to use * * @return string * * @since 1.0.0 */ public static function arrayToCsv(array $data, string $delimiter = ';', string $enclosure = '"', string $escape = '\\') : string { $outstream = fopen('php://memory', 'r+'); /** @noinspection PhpMethodParametersCountMismatchInspection */ fputcsv($outstream, $data, $delimiter, $enclosure, $escape); rewind($outstream); $csv = fgets($outstream); fclose($outstream); return $csv; } /** * Get array value by argument id. * * Useful for parsing command line parsing * * @param string $id Id to find * @param array $args CLI command list * * @return string * * @since 1.0.0 */ public static function getArg(string $id, array $args) /* : ?string */ { if (($key = array_search($id, $args)) === false || $key === count($args) - 1) { return null; } return trim($args[$key + 1], '" '); } /** * Flatten array * * Reduces multi dimensional array to one dimensional array. Flatten tries to maintain the index as far as possible. * * @param array $array Multi dimensional array to flatten * * @return array * * @since 1.0.0 */ public static function arrayFlatten(array $array) : array { // see collection collapse as alternative?! $flat = []; $stack = array_values($array); while (!empty($stack)) { $value = array_shift($stack); if (is_array($value)) { $stack = array_merge(array_values($value), $stack); } else { $flat[] = $value; } } return $flat; } /** * Sum of array elements * * @param array $array Array to sum * @param int $start Start index * @param int $count Amount of elements to sum * * @return int|float * * @since 1.0.0 */ public static function arraySum(array $array, int $start = 0, int $count = 0) { $count = $count === 0 ? count($array) : $start + $count; $sum = 0; $array = array_values($array); for ($i = $start; $i <= $count - 1; $i++) { $sum += $array[$i]; } return $sum; } /** * Sum multi dimensional array * * @param array $array Multi dimensional array to flatten * * @return mixed * * @since 1.0.0 */ public static function arraySumRecursive(array $array) { return array_sum(self::arrayFlatten($array)); } }