PHP's print_r in TypeScript

✓ Verified: PHP 8.3
Examples tested against actual runtime. CI re-verifies continuously. Only documented examples are tested.

How to use

Install via yarn add locutus and import: import { print_r } from 'locutus/php/var/print_r'.

Or with CommonJS: const { print_r } = require('locutus/php/var/print_r')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1print_r(1, true)'1'

Dependencies

This function uses the following Locutus functions:

Here's what our current TypeScript equivalent to PHP's print_r looks like.

import { type PhpRuntimeValue, toPhpArrayObject } from '../_helpers/_phpTypes.ts'
import { echo } from '../strings/echo.ts'

type PrintValue = PhpRuntimeValue

export function print_r(array: PrintValue, returnVal?: boolean): string | true {
// discuss at: https://locutus.io/php/print_r/
// parity verified: PHP 8.3
// original by: Michael White (https://getsprink.com)
// improved by: Ben Bryan
// improved by: Brett Zamir (https://brett-zamir.me)
// improved by: Kevin van Zonneveld (https://kvz.io)
// input by: Brett Zamir (https://brett-zamir.me)
// example 1: print_r(1, true)
// returns 1: '1'

let output = ''
const padChar = ' '
const padVal = 4

const _repeatChar = function (len: number, padChar: string): string {
let str = ''
for (let i = 0; i < len; i++) {
str += padChar
}
return str
}
const _formatArray = function (obj: PrintValue, curDepth: number, padVal: number, padChar: string): string {
if (curDepth > 0) {
curDepth++
}

const basePad = _repeatChar(padVal * curDepth, padChar)
const thickPad = _repeatChar(padVal * (curDepth + 1), padChar)
let str = ''

if (typeof obj === 'object' && obj !== null && obj.constructor) {
const objectValue = toPhpArrayObject(obj)
str += 'Array\n' + basePad + '(\n'
for (const key in objectValue) {
const value = objectValue[key]
if (Array.isArray(value)) {
str += thickPad
str += '['
str += key
str += '] => '
str += _formatArray(value, curDepth + 1, padVal, padChar)
} else {
str += thickPad
str += '['
str += key
str += '] => '
str += value
str += '\n'
}
}
str += basePad + ')\n'
} else if (obj === null || obj === undefined) {
str = ''
} else {
// for our "resource" class
str = String(obj)
}

return str
}

output = _formatArray(array, 0, padVal, padChar)

if (returnVal !== true) {
echo(output)
return true
}
return output
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP var functions


Star