क्या PHP के लिए एक सुंदर प्रिंट है?


110

मैं कुछ PHP स्क्रिप्ट्स को ठीक कर रहा हूँ और मुझे माणिक का सुंदर प्रिंटर याद आ रहा है। अर्थात

require 'pp'
arr = {:one => 1}
pp arr

आउटपुट {: एक => 1} होगा। यह भी काफी जटिल वस्तुओं के साथ काम करता है और एक अज्ञात स्क्रिप्ट में खुदाई को बहुत आसान बनाता है। क्या PHP में इस कार्यक्षमता को डुप्लिकेट करने का कोई तरीका है?

जवाबों:


101

दोनों print_r()और var_dump()इच्छा उत्पादन पीएचपी के भीतर वस्तुओं का दृश्य निरूपण।

$arr = array('one' => 1);
print_r($arr);
var_dump($arr);

42
यदि आप XDebug एक्सटेंशन इंस्टॉल करते हैं, तो var_dump एक प्रेट्रियर प्रिंटर बन जाता है।
एलन स्टॉर्म

105
एक ब्राउज़र उपयोग में इसे और भी अच्छा बनाने के लिए: इको "<प्री>"; print_r ($ आगमन); गूंज "</ pre>";
डोमिनिक

13
डोमिनिक के बिंदु पर केवल इसे लपेटें: फ़ंक्शन pr ($ array = null) {प्रिंट "<प्री> <कोड>"। प्रिंट_आर ($ सरणी)। "</ code> </ pre>"; }
डैरेन न्यूटन

10
@darren_n: print_r() स्वचालित रूप से आउटपुट करता है और कुछ भी वापस नहीं करता है (जब तक कि इसका दूसरा पैरामीटर नहीं है true), इसलिए आप किसी अन्य स्ट्रिंग को नहीं कर सकते। इसके बजाय निम्नलिखित का प्रयोग करें:function pr($var) { print '<pre>'; print_r($var); print '</pre>'; }
एंड्रयू मूर

6
@ डॉमेनिक आप संभवतः 'इको' <प्री> ', htmlentities (प्रिंट_आर ($ गिरफ्तारी, सच)),' </ पूर्व> 'के बजाय डेरेन के सुझाव के लिए कुछ विश्वसनीयता उधार

158

यह वही है जो मैं अपने सरणियों को प्रिंट करने के लिए उपयोग करता हूं:

<pre>
    <?php
        print_r($your_array);
    ?>
</pre>

जादू preटैग के साथ आता है ।


3
यह वास्तव में बहुत बेहतर है var_dumpक्योंकि var_dumpयह परिणाम देता है यदि यह एक बड़ा सरणी या एक बड़ा स्ट्रिंग है ...
राडु मुराज़े

3
एक सरलीकृत संस्करण होगा: इको "<प्री>"। प्रिंट_आर ($ सरणी, 1)। "</ pre>";
कुबियो

के उत्पादन से बचने के लिए मत भूलना print_r: $formatted = print_r($array, true); print "<pre>" . htmlspecialchars($formatted, ENT_QUOTES, 'UTF-8', true) . "</pre>";
Glutexo

21

सरलता के लिए, print_r () और var_dump () को हराया नहीं जा सकता। यदि आप कुछ कम चाहते हैं, तो आप बड़ी सूची और / या गहरी नेस्टेड डेटा के साथ काम कर रहे हैं, क्रुमो आपके जीवन को बहुत आसान बना देगा - यह आपको एक अच्छी तरह से स्वरूपित टकराव / विस्तार प्रदर्शन प्रदान करता है।


21

मुझे अभी तक मिला सबसे अच्छा यह है:

echo "<pre>";
print_r($arr);
echo "</pre>";

और यदि आप इसे और अधिक विस्तृत चाहते हैं:

echo "<pre>";
var_dump($arr);
echo "</pre>";

एक जोड़ा जा रहा है <pre>एक वेब विकास के वातावरण में एचटीएमएल टैग नई-पंक्तियों का सम्मान करेंगे \nकुछ html जोड़े बिना प्रिंट समारोह सही ढंग से की,<br>


19

PHP के लिए, आप नेस्टेड सरणियों और वस्तुओं का एक सुंदर प्रतिनिधित्व करने के लिए आसानी से HTML और कुछ सरल पुनरावर्ती कोड का लाभ उठा सकते हैं।

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => ' . pp($val) . '</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . $val . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

यह नेस्टेड HTML सूचियों की सूची के रूप में सरणी को प्रिंट करेगा। HTML और आपका ब्राउज़र इंडेंट करने और इसे सुपाठ्य बनाने का ध्यान रखेगा।



6

html_errors = onXdebug के साथ संयोजन में var_dump () का सुंदर मुद्रण प्राप्त करने के लिए php.ini में सेट करना याद रखें ।


6

इसके लिए सबसे अच्छा तरीका है

echo "<pre>".print_r($array,true)."</pre>";

उदाहरण:

$array=array("foo"=>"999","bar"=>"888","poo"=>array("x"=>"111","y"=>"222","z"=>"333"));
echo "<pre>".print_r($array,true)."</pre>";

परिणाम:

सरणी
(
    [foo] => 999
    [बार] => 888
    [पू] => सरणी
        (
            [x] => 111
            [y] => 222
            [z] => 333
        )
)

Print_r के बारे में और पढ़ें ।

प्रलेखन से print_r "सही" के दूसरे पैरामीटर के बारे में:

जब यह पैरामीटर TRUE पर सेट हो जाता है, तो print_r () इसे प्रिंट करने के बजाय सूचना लौटा देगा।


Php से वेब ब्राउज़र में आउटपुट भेजने का सही समाधान।
इव्ज़

4

यह एक छोटा सा फंक्शन है, अगर आप ऐरे को डीबग कर रहे हैं तो मैं इसका हर समय उपयोग करता हूं। शीर्षक पैरामीटर आपको कुछ डीबग जानकारी देता है कि आप किस सरणी को प्रिंट कर रहे हैं। यह भी जाँचता है कि क्या आपने इसे एक वैध सरणी के साथ आपूर्ति की है और आपको यह पता करने देता है कि आपने नहीं किया है।

function print_array($title,$array){

        if(is_array($array)){

            echo $title."<br/>".
            "||---------------------------------||<br/>".
            "<pre>";
            print_r($array); 
            echo "</pre>".
            "END ".$title."<br/>".
            "||---------------------------------||<br/>";

        }else{
             echo $title." is not an array.";
        }
}

मूल उपयोग:

//your array
$array = array('cat','dog','bird','mouse','fish','gerbil');
//usage
print_array("PETS", $array);

परिणाम:

PETS
||---------------------------------||

Array
(
    [0] => cat
    [1] => dog
    [2] => bird
    [3] => mouse
    [4] => fish
    [5] => gerbil
)

END PETS
||---------------------------------||

नीचे क्यों? अच्छा काम करता है ना? अगर मैं कुछ गलत कर रहा हूँ तो मैं इसके बारे में उत्सुक नहीं हूँ। मैं स्वयं पढ़ाया जाता हूँ इसलिए कृपया मुझे बताएं।
लॉरेंस


3

यदि आप अधिक डीबगिंग कर रहे हैं, तो Xdebug आवश्यक है। डिफ़ॉल्ट रूप से यह var_dump()अपने स्वयं के संस्करण के साथ ओवरराइड करता है जो PHP के डिफ़ॉल्ट की तुलना में बहुत अधिक जानकारी प्रदर्शित करता हैvar_dump()

Zend_Debug भी है ।


2
Blarg। Xdebug का var डंप बेकार है क्योंकि यह HTML को आउटपुट करता है ... ओह, हाँ, CLI टेस्ट में शानदार लग रहा है ।
जेसन

Xdebug इन दिनों CLI के लिए विभिन्न आउटपुट का उपयोग करता है।
जेफ हब्बार्ड 14

3

मैंने नहीं देखा कि किसी ने भी आपके print_r कमांड के साथ एक "अल्पविराम सच" करने का उल्लेख किया है, और फिर आप प्रदान किए गए सभी समाधानों या बहु-गंदे दिखने वाले समाधानों के माध्यम से html के साथ इनलाइन का उपयोग कर सकते हैं।

print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";

इसके अतिरिक्त, आपको संभवतः संग्रहीत XSS खतरों से बचाने के htmlspecialchars()लिए print_r(), के आसपास भी करना चाहिए ।
क्रिश्चियन

2

एक-लाइनर जो आपको सरणी सामग्री देखने के लिए "देखने के स्रोत" के लगभग बराबर देगा:

मान लेता है php 4.3.0+:

echo nl2br(str_replace(' ', ' ', print_r($_SERVER, true)));


2

यह फ़ंक्शन बहुत अच्छा काम करता है जब तक आप header('Content-type: text/plain');रिटर्न स्ट्रिंग को आउटपुट करने से पहले सेट करते हैं

http://www.php.net/manual/en/function.json-encode.php#80339

<?php
// Pretty print some JSON
function json_format($json)
{
    $tab = "  ";
    $new_json = "";
    $indent_level = 0;
    $in_string = false;

    $json_obj = json_decode($json);

    if($json_obj === false)
        return false;

    $json = json_encode($json_obj);
    $len = strlen($json);

    for($c = 0; $c < $len; $c++)
    {
        $char = $json[$c];
        switch($char)
        {
            case '{':
            case '[':
                if(!$in_string)
                {
                    $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
                    $indent_level++;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '}':
            case ']':
                if(!$in_string)
                {
                    $indent_level--;
                    $new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ',':
                if(!$in_string)
                {
                    $new_json .= ",\n" . str_repeat($tab, $indent_level);
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ':':
                if(!$in_string)
                {
                    $new_json .= ": ";
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '"':
                if($c > 0 && $json[$c-1] != '\\')
                {
                    $in_string = !$in_string;
                }
            default:
                $new_json .= $char;
                break;                   
        }
    }

    return $new_json;
}
?>

2

यदि आप किसी भी PHP चर (केवल सादे पाठ की तुलना में) का एक अच्छा प्रतिनिधित्व चाहते हैं, तो मेरा सुझाव है कि आप good_r () का प्रयास करें ; यह मूल्यों से अधिक प्रासंगिक उपयोगी जानकारी (जैसे: वस्तुओं के लिए गुण और विधियाँ) को प्रिंट करता है। यहां छवि विवरण दर्ज करें डिस्क्लेमर: मैंने यह खुद लिखा है।


2

एक अच्छा रंगीन आउटपुट:

गूंज svar_dump (सरणी ("ए", "बी" => "2", "सी" => सरणी ("डी", "ई" => सरणी ("एफ", "जी"))));

ऐसा दिखेगा:

यहां छवि विवरण दर्ज करें

स्रोत:

<?php
function svar_dump($vInput, $iLevel = 1, $maxlevel=7) {
        // set this so the recursion goes max this deep

        $bg[1] = "#DDDDDD";
        $bg[2] = "#C4F0FF";
        $bg[3] = "#00ffff";
        $bg[4] = "#FFF1CA";
        $bg[5] = "white";
        $bg[6] = "#BDE9FF";
        $bg[7] = "#aaaaaa";
        $bg[8] = "yellow";
        $bg[9] = "#eeeeee";
        for ($i=10; $i<1000; $i++) $bg[$i] =  $bg[$i%9 +1];
        if($iLevel == 1) $brs='<br><br>'; else $brs='';
        $return = <<<EOH
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'>
EOH;

        if (is_int($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".intval($vInput)."</b>) </td>";
        } else if (is_float($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".doubleval($vInput)."</b>) </td>";
        } else if (is_string($vInput)) {
            $return .= "<pre style='color:black;font-size:9px;font-weight:bold;padding:0'>".gettype($vInput)."(" . strlen($vInput) . ") \"" . _my_html_special_chars($vInput). "\"</pre></td>"; #nl2br((_nbsp_replace,
        } else if (is_bool($vInput)) {
            $return .= gettype($vInput)."(<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b>)</td>";
        } else if (is_array($vInput) or is_object($vInput)) {
            reset($vInput);
            $return .= gettype($vInput);
            if (is_object($vInput)) {
                $return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\"  Object of ".get_parent_class($vInput);
                if (get_parent_class($vInput)=="") $return.="stdClass";
                $return.="</b>";
                $vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n");
            }
            $return .= " count = [<b>" . count($vInput) . "</b>] dimension = [<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr>
            <tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>";
            $return .=  <<<EOH
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'>
EOH;

            while (list($vKey, $vVal) = each($vInput)){
                $return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>";
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= _nbsp_replace(_my_html_special_chars($vKey));
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td>
                <td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>";

                if ($iLevel>$maxlevel and is_array($vVal)) $return .=  svar_dump("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else if ($iLevel>$maxlevel and is_object($vVal)) $return .=  svar_dump("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else $return .= svar_dump($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>";
            }
            $return .= "</table>";
        } else {
            if (gettype($vInput)=="NULL") $return .="null";
            else $return .=gettype($vInput);
            if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>";
        }
        $return .= "</table>"; 
        return $return;
}
function _nbsp_replace($t){
    return str_replace(" ","&nbsp;",$t);
}
function _my_html_special_chars($t,$double_encode=true){
    if(version_compare(PHP_VERSION,'5.3.0', '>=')) {
        return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode);
    } else if(version_compare(PHP_VERSION,'5.2.3', '>=')) {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode);
    } else {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1');
    }
}

1

चूँकि मैंने इसे Google के माध्यम से खोजा कि कैसे समस्या निवारण के लिए इसे अधिक पठनीय बनाने के लिए json को प्रारूपित किया जाए।

ob_start() ;  print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );

1

1

यदि आपका सर्वर आपको हेडर (सादे पाठ में) बदलने के लिए भेजता है, तो कुछ भेजे जाने के बाद, या यदि आप अपना कोड नहीं बदलना चाहते हैं, तो आपके ब्राउज़र से सिर्फ "व्यू सोर्स" - आपका टेक्स्ट एडिटर (यहां तक ​​कि नोटपैड) प्रक्रिया करेगा आपके ब्राउज़र से बेहतर नई लाइनें, और गड़बड़ गड़बड़ होगी:

ऐरे ([रूट] => १ [उप १] => एरे () [उप २] => एरे () [उप ३] => एरे () [सब ४] = = एरे () ...

ठीक से वर्जित प्रतिनिधित्व में:

[root] => 1
  [sub1] => Array
      (
      )

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...

1

यदि आप आगे के कार्यों में परिणाम का उपयोग करना चाहते हैं, तो आप var_export का उपयोग करके स्ट्रिंग के रूप में एक वैध PHP अभिव्यक्ति प्राप्त कर सकते हैं :

$something = array(1,2,3);
$some_string = var_export($something, true);

बहुत सारे लोग अपने प्रश्नों में कर रहे हैं, मुझे उम्मीद है कि वे एक समारोह समर्पित कर चुके हैं और अतिरिक्त लॉगिंग को चिपकाने की नकल नहीं कर रहे हैं। इन स्थितियों में var_exportएक समान आउटपुट प्राप्त करता var_dumpहै।


1

यहाँ pp का एक संस्करण है जो वस्तुओं के साथ-साथ सरणियों के लिए भी काम करता है (मैंने कॉमा भी निकाला):

function pp($arr){
    if (is_object($arr))
        $arr = (array) $arr;
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_object($val))
                $val = (array) $val;
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . ')</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

1

यहां प्रिंट_आर के सभी ओवरहेड के बिना एक और सरल डंप दिया गया है:

function pretty($arr, $level=0){
    $tabs = "";
    for($i=0;$i<$level; $i++){
        $tabs .= "    ";
    }
    foreach($arr as $key=>$val){
        if( is_array($val) ) {
            print ($tabs . $key . " : " . "\n");
            pretty($val, $level + 1);
        } else {
            if($val && $val !== 0){
                print ($tabs . $key . " : " . $val . "\n"); 
            }
        }
    }
}
// Example:
$item["A"] = array("a", "b", "c");
$item["B"] = array("a", "b", "c");
$item["C"] = array("a", "b", "c");

pretty($item);

// -------------
// yields
// -------------
// A : 
//     0 : a
//     1 : b
//     2 : c
// B : 
//     0 : a
//     1 : b
//     2 : c
// C : 
//     0 : a
//     1 : b
//     2 : c

0

मुझे लगता है कि php में सुंदर प्रिंटिंग जोंस का सबसे अच्छा समाधान हैडर को बदलना है:

header('Content-type: text/javascript');

(यदि आप टेक्स्ट / जसन करते हैं तो कई ब्राउजर डाउनलोड करने का संकेत देंगे ... फेसबुक अपने ग्राफ प्रोटोकॉल के लिए टेक्स्ट / जावास्क्रिप्ट करता है, इसलिए यह बहुत बुरा नहीं होना चाहिए)


0

FirePHP एक फ़ायरफ़ॉक्स प्लगइन है जो प्रिंट में एक बहुत सुंदर लॉगिंग सुविधा है।



0

@ स्टीफन के उत्तर पर विस्तार करते हुए, प्रदर्शन उद्देश्यों के लिए कुछ बहुत ही मामूली ट्विस्ट जोड़े गए।

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . '),</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . ',</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

ऐसे किसी भी बहुआयामी सरणी को प्रारूपित करेंगे:

यहां छवि विवरण दर्ज करें


0

यह वही है जो मैं उपयोग करता हूं:

$x= array(1,2,3);
echo "<pre>".var_export($x,1)."</pre>";

0

मैंने डिबगिंग के लिए एक सरणी प्रिंट करने के लिए यह फ़ंक्शन बनाया:

    function print_a($arr) {
        print '<code><pre style="text-align:left; margin:10px;">'.print_r($arr, TRUE).'</pre></code>';
    }

आशा है कि यह मदद करता है, Tziuka एस।


0

कैसे https://github.com/hazardland/debug.php से डीबग के रूप में नामित एकल स्टैंडअलोन फ़ंक्शन के बारे में ।

विशिष्ट डीबग () html आउटपुट इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

लेकिन आप डेटा को एक सादे पाठ के रूप में भी एक ही फ़ंक्शन के साथ (4 स्थान इंडेंटेड टैब के साथ) इस तरह से आउटपुट कर सकते हैं (और यदि आवश्यक हो तो इसे फ़ाइल में लॉग इन भी कर सकते हैं):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"


-1

मैंने इनमें से कुछ विकल्पों को एक साथ एक छोटे से हेल्पर फंक्शन में खींच लिया

http://github.com/perchten/neat_html/

आप html से प्रिंट कर सकते हैं, बड़े करीने से तैयार किए गए हैं, साथ ही स्ट्रिंग, ऑटो-प्रिंट या रिटर्न इत्यादि को भी शामिल कर सकते हैं।

यह फ़ाइल संभालती है, इसमें ऑब्जेक्ट्स, सरणियाँ, शून्य बनाम झूठे और पसंद है।

कुछ वातावरण में सेटिंग्स का उपयोग करते समय कुछ विश्व स्तर पर सुलभ (लेकिन अच्छी तरह से स्कैन किए गए) सहायक भी हैं

प्लस गतिशील, सरणी-आधारित या स्ट्रिंग वैकल्पिक तर्क।

और, मैं इसे जोड़ता रहता हूं। तो यह समर्थित है: डी


यह एक बेहतर उत्तर होगा यदि आपने कुछ कोड दिखाते हुए दिखाया कि यह कैसे उपयोग किया जाता है।
तेइपेमम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.