PHP için oldukça baskı var mı?

18 Cevap php

Bazı PHP betikleri sabitleme ve ben Ruby'nin oldukça yazıcıyı kaçırıyorum. yani

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

çıktısı {: => 1. Bir}. Bu bile oldukça karmaşık nesneler ile çalışır ve bilinmeyen bir komut dosyası içine çok daha kolay kazma yapar. PHP bu işlevselliği çoğaltmak için bazı yolu var mı?

18 Cevap

Bu benim diziler yazdırmak için ne kullanın:

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

Sihirli "öncesi" etiketi ile birlikte geliyor ... Have a nice day!

Basitlik için, print_r() ve var_dump() yendi olamaz. Eğer biraz meraklısı bir şey istiyorum ya da büyük listeleri ve / veya içe geçmiş veri ile ilgili ise, Krumo hayatınızı çok daha kolay hale getirecek - bu güzel ekran genişletme / daraltma biçimlendirilmiş sağlar.

PHP için, kolayca iç içe diziler ve nesneler oldukça temsilini yapmak için HTML avantajı ve bazı basit özyinelemeli kod alabilir.

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;
}

Bu iç içe geçmiş HTML listelerin listesi olarak dizi basacaktır. HTML ve tarayıcı girinti ve okunaklı hale ilgilenir.

Nasıl print_r hakkında?

http://www.php.net/print_r

Xdebug birlikte var_dump oldukça baskı () almak için php.ini içinde html_errors = on ayarlamayı unutmayın.

Ben buldum iyi henüz şudur:

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

Ve bunu daha detaylı isterseniz:

echo "<pre>";
var_dump($arr);
echo "</pre>";
error_log(print_r($variable,true));

pencereler için syslog veya eventlog göndermek için

Eğer daha fazla hata ayıklama yapıyorsanız, Xdebug esastır. Varsayılan olarak var_dump() PHP'nin varsayılan {[(çok daha fazla bilgi görüntüler o kendi sürümü ile geçersiz kılar 1)]} .

Orada da Zend_Debug.

Bu diziler hata ayıklaması yapıyorsanız ben onun kullanışlı her zaman kullanmak biraz fonksiyonudur. Başlık parametresi size baskı ne dizisi gibi bazı hata ayıklama bilgi verir. Eğer geçerli bir dizi ile sağlanan ve size vermedi bilmenizi sağlar varsa o da denetler.

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.";
        }
}

Temel kullanım:

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

Sonuçlar:

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

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

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

Size dizi içeriğini görmek için "izleme kaynak" kaba eşdeğer verecek bir tek-liner:

php 4.3.0 + varsayar:

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

Bu işlev çok uzun belirtildiği gibi oldukça iyi çalışıyor header('Content-type: text/plain'); return dize çıktısı önce

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;
}
?>

Google sorun giderme için daha okunabilir hale getirmek için json biçimlendirmek için nasıl arama yoluyla bu buldum beri.

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

Ben php oldukça baskı json iyi çözüm başlığını değiştirmek için olduğunu düşünüyorum:

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

(Metin / json birçok tarayıcı yapmak bir indirme isteyecektir eğer ... facebook kendi grafik protokolü için text / javascript çok kötü olmamalıdır bu yüzden)

Sunucu sonra (düz metin) başlıklarını değiştirerek sizin için itiraz ederse bazı gönderdi, ya da kodunu değiştirmek istemiyorsanız, just "view source" from your browser edilmiştir - Metin editörü (hatta notepad) yeni işleyecek Tarayıcınızın daha iyi ve karışık bir karmaşa dönecek hatları:

Array ([root] => 1 [sub1] => Array () [sub2] => Array () [sub3] => Array () [sub4] => Array () ...

düzgün sekmeli temsil içine:

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

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...

FirePHP çok güzel bir günlüğe kaydetme özelliği var yazdırmak bir firefox eklentisi.

Daha fazla fonksiyonları sonucu kullanmak istiyorsanız, kullandığınız bir dize olarak geçerli bir PHP ifadesini almak var_export yapabilirsiniz:

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

Insanların sorularına yapıyorsun bir çok şey için, ben bir işlev ithaf ettik ve çevresinde ekstra günlük yapıştırarak kopya değildir umuyorum. var_export, bu durumlarda var_dump ile benzer bir sonuç elde edilir.

Ben hata ayıklama için bu işlevi kullanın:

function pre($pre=true) {
    if($pre) {
        echo "<pre>";
    }
    foreach(func_get_args as $arg) {
        print_r($arg);
        # or, if it pleases you more:
        # var_dump(arg); 
    }
    if($pre) {
        echo "<pre>";
    }

}

Bu şekilde gerek yok

pre($arrayOne);
pre($arrayTwo);

Ama bir seferde:

pre($arrayOne, $arrayTwo); 

Ya da pek çok argüman bunu vermek.