Web студия "GrandView"
  Главная   Написать Контакты
   
   
О проекте
Руководство php
 

print_r

(PHP 4, PHP 5)

print_r --  Prints human-readable information about a variable

Description

bool print_r ( mixed expression [, bool return] )

Замечание: The return parameter was added in PHP 4.3.0

print_r() displays information about a variable in a way that's readable by humans. If given a string, integer or float, the value itself will be printed. If given an array, values will be presented in a format that shows keys and elements. Similar notation is used for objects. print_r(), var_dump() and var_export() will also show protected and private properties of objects with PHP 5.

Remember that print_r() will move the array pointer to the end. Use reset() to bring it back to beginning.

<pre>
<?php
    $a
= array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
   
print_r ($a);
?>
</pre>

Результат выполнения данного примера:

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

If you would like to capture the output of print_r(), use the return parameter. If this parameter is set to TRUE, print_r() will return its output, instead of printing it (which it does by default).

Замечание: This function internally uses the output buffering with this parameter so it can not be used inside ob_start() callback function.

Пример 1. return parameter example

<?php
    $b
= array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
   
$results = print_r($b, true); //$results now contains output from print_r
?>

Замечание: If you need to capture the output of print_r() with a version of PHP prior to 4.3.0, use the output-control functions.

Замечание: Prior to PHP 4.0.4, print_r() will continue forever if given an array or object that contains a direct or indirect reference to itself. An example is print_r($GLOBALS) because $GLOBALS is itself a global variable that contains a reference to itself.

See also ob_start(), var_dump() and var_export().



serialize> <isset
Last updated: Sat, 27 Jan 2007
 
add a note add a note User Contributed Notes
print_r
bart at mediawave dot nl
30-Oct-2007 05:27
Here's a PHP version of print_r which can be tailored to your needs. Shows protected and private properties of objects and detects recursion (for objects only!). Usage:

void u_print_r ( mixed $expression [, array $ignore] )

Use the $ignore parameter to provide an array of property names that shouldn't be followed recursively.

<?php

function u_print_r($subject, $ignore = array(), $depth = 1, $refChain = array())
{
    if (
$depth > 20) return;
    if (
is_object($subject)) {
        foreach (
$refChain as $refVal)
            if (
$refVal === $subject) {
                echo
"*RECURSION*\n";
                return;
            }
       
array_push($refChain, $subject);
        echo
get_class($subject) . " Object ( \n";
       
$subject = (array) $subject;
        foreach (
$subject as $key => $val)
            if (
is_array($ignore) && !in_array($key, $ignore, 1)) {
                echo
str_repeat(" ", $depth * 4) . '[';
                if (
$key{0} == "\0") {
                   
$keyParts = explode("\0", $key);
                    echo
$keyParts[2] . (($keyParts[1] == '*')  ? ':protected' : ':private');
                } else
                    echo
$key;
                echo
'] => ';
               
u_print_r($val, $ignore, $depth + 1, $refChain);
            }
        echo
str_repeat(" ", ($depth - 1) * 4) . ")\n";
       
array_pop($refChain);
    } elseif (
is_array($subject)) {
        echo
"Array ( \n";
        foreach (
$subject as $key => $val)
            if (
is_array($ignore) && !in_array($key, $ignore, 1)) {
                echo
str_repeat(" ", $depth * 4) . '[' . $key . '] => ';
               
u_print_r($val, $ignore, $depth + 1, $refChain);
            }
        echo
str_repeat(" ", ($depth - 1) * 4) . ")\n";
    } else
        echo
$subject . "\n";
}

?>

Example:

<?php

class test {

    public
$var1 = 'a';
    protected
$var2 = 'b';
    private
$var3 = 'c';
    protected
$array = array('x', 'y', 'z');

}

$test = new test();
$test->recursiveRef = $test;
$test->anotherRecursiveRef->recursiveRef = $test;
$test->dont->follow = 'me';

u_print_r($test, array('dont'));

?>

Will produce:

test Object (
    [var1] => a
    [var2:protected] => b
    [var3:private] => c
    [array:protected] => Array (
        [0] => x
        [1] => y
        [2] => z
    )
    [recursiveRef] => *RECURSION*
    [anotherRecursiveRef] => stdClass Object (
        [recursiveRef] => *RECURSION*
    )
)
php at deboom dot biz
21-Sep-2007 05:17
If you need to import an print_R output back to an array you could use this.

This could also be (ab)used to convert a object into a array...

<?php
function object2array($printr) {                   
       
$newarray = array();       
       
$a[0] = &$newarray;       
        if (
preg_match_all('/^\s+\[(\w+).*\] => (.*)\n/m', $printr, $match)) {                       
            foreach (
$match[0] as $key => $value) {   
                (int)
$tabs = substr_count(substr($value, 0, strpos($value, "[")), "        ");               
                if (
$match[2][$key] == 'Array' || substr($match[2][$key], -6) == 'Object') {                   
                   
$a[$tabs+1] = &$a[$tabs][$match[1][$key]];
                }                           
                else {
                   
$a[$tabs][$match[1][$key]] = $match[2][$key];                   
                }
            }
        }   
        return
$newarray;   
    }
?>
motin at demomusic dot nu
19-Jun-2007 04:01
This works around the hacky nature of print_r in return mode (using output buffering for the return mode to work is hacky...):

<?php
/**
  * An alternative to print_r that unlike the original does not use output buffering with
  * the return parameter set to true. Thus, Fatal errors that would be the result of print_r
  * in return-mode within ob handlers can be avoided.
  *
  * Comes with an extra parameter to be able to generate html code. If you need a
  * human readable DHTML-based print_r alternative, see http://krumo.sourceforge.net/
  *
  * Support for printing of objects as well as the $return parameter functionality
  * added by Fredrik Wolls
Новости
11 июля 2007
Сайт запущен
© 2007 info@grandviewstudio.com

Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/sites/grandviewstudiocom/www/65f67d67a94ad980786580ae69e11c07/sape.php on line 324

Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/sites/grandviewstudiocom/www/65f67d67a94ad980786580ae69e11c07/sape.php on line 330
Z058440144362 Z348613067571