配列を読み取り可能/階層形式で表示する


95

これが私の配列のデータをプルするためのコードです

<?php
    $link = mysqli_connect('localhost', 'root', '', 'mutli_page_form');

    $query = "SELECT * FROM wills_children WHERE will=73";

    $result = mysqli_query($link, $query) or die(mysqli_error($link));

    if ($result = mysqli_query($link, $query)) {

    /* fetch associative array */
    if($row = mysqli_fetch_assoc($result)) {
        $data = unserialize($row['children']);
    }

    /* free result set */
    mysqli_free_result($result);
    }
?>

print_r($ data)を使用すると、次のようになります。

Array ( [0] => Array ( [0] => Natural Chlid 1 [1] => Natural Chlid 2 [2] => Natural Chlid 3 ) ) 

私はそれを次のように読みたい:

自然の子供1
自然の子供2
自然の子供3

回答:


31

これを試して:

foreach($data[0] as $child) {
   echo $child . "\n";
}

代わりに print_r($data)


1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> これはブライアンに感謝します!
ザビエル

55
<pre> </ pre>が明らかな選択であるのに、なぜこれが選択された答えなのですか?
カンセイ

1
多次元配列がある場合、これは機能しません。
Alesana

3
@アレサナうん、でもOPは多次元配列を持っていなかった。他の人がこの答えについてコメントしたので、あなたがやりたい方法はそうだと思います<pre>print_r($data)</pre>。5年以上前の回答に対する新しいコメントを見るのはいつも楽しいです!:)
Brian Driscoll

2
ああ、私の場合、私は多次元配列を扱っていました。私はこれまでコメントをしていなかったので、他の誰もこれを指摘していないのを見たとき、それは絶好の機会かもしれないと思いました!
Alesana

423

の代わりに

print_r($data);

試す

print "<pre>";
print_r($data);
print "</pre>";

3
またtrue、データをとして取得するために、print_rに2番目のパラメーターとして渡すことができることにも言及する価値がありますstring。これでreturn '<pre>'.print_r(User::all(), true);、ルートファイルからできます。
DutGRIFF 2014年

私もこの答えが好きですが、OPは文字列だけを出力することを望んでおり、配列インデックスは望まないようです。そして、1次元データのみ。私は通常、ソリューションを続行する前にデータのレコードセットをチェックするためだけにこれを行うので、このソリューションはそのようなものに非常にうまく機能します。
iopener


47

私は基本的な機能を持っています:

function prettyPrint($a) {
    echo "<pre>";
    print_r($a);
    echo "</pre>";
}

prettyPrint($data);

編集:最適化された機能

function prettyPrint($a) {
    echo '<pre>'.print_r($a,1).'</pre>';
}

編集:カスタムタグをサポートするMoar最適化機能

function prettyPrint($a, $t='pre') {echo "<$t>".print_r($a,1)."</$t>";}

7
ベストこれまでの答え、それはカンマで非常に頻繁に使われている場合は、さらにそれを最適化することができます:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf

15

var_export()は、忘れられた兄弟がvar_dump()最高の出力を持っていると思います-それはよりコンパクトです:

echo "<pre>";
var_export($menue);
echo "</pre>";

ちなみに、を使用する必要はありません<pre>。Webページのソースコードを見るvar_dump()var_export()、既にフォーマットされています。


var_exportについては同意しますが、結果を適切な形式で出力しないため、<pre> </ pre>と組み合わせる必要がありました。
Chaya Cooper

3
@ Chaya-Cooper表示されたページでは適切にフォーマットされていませんが、Hexodusは「Webページのソースコード内」でフォーマットされていると思います->トライメニューの[ソースを表示]、またはFirefoxのCtrl-U
fpierrat

@fpierratはい、これはまさに私が意図したことです。それを明確にしてくれてありがとう。
Hexodus 2015

1
このアプローチの1つの利点は、出力が有効なPHPとしてフォーマットされるため、必要に応じてコードにコピーして貼り付けることができることです。
Sean the Bean

13

誰かがとてもクールな配列を表示する必要がある場合は、このメソッドを使用してください。これにより、ブラウザコンソールに出力されます。

function console($obj)
{
    $js = json_encode($obj);
    print_r('<script>console.log('.$js.')</script>');
}

このように使えます

console($myObject);

出力はこのようになります。とてもクールです!

ここに画像の説明を入力してください


4
foreach($array as $v) echo $v, PHP_EOL;

更新:より洗練されたソリューションは次のようになります:

 $test = [
    'key1' => 'val1',
    'key2' => 'val2',
    'key3' => [
        'subkey1' => 'subval1',
        'subkey2' => 'subval2',
        'subkey3' => [
            'subsubkey1' => 'subsubval1',
            'subsubkey2' => 'subsubval2',
        ],
    ],
];
function printArray($arr, $pad = 0, $padStr = "\t") {
    $outerPad = $pad;
    $innerPad = $pad + 1;
    $out = '[' . PHP_EOL;
    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            $out .= str_repeat($padStr, $innerPad) . $k . ' => ' . printArray($v, $innerPad) . PHP_EOL;
        } else {
            $out .= str_repeat($padStr, $innerPad) . $k . ' => ' . $v;
            $out .= PHP_EOL;
        }
    }
    $out .= str_repeat($padStr, $outerPad) . ']';
    return $out;
}

echo printArray($test);

これは出力します:

    [
        key1 => val1
        key2 => val2
        key3 => [
            subkey1 => subval1
            subkey2 => subval2
            subkey3 => [
                subsubkey1 => subsubval1
                subsubkey2 => subsubval2
            ]
        ]
    ]

<?php foreach($ data as $ v)echo $ v、PHP_EOL; ?>「配列」を表示
ザビエル

1
さて、それからあなたは2回繰り返す必要がありますforeach($ raw as $ array)foreach($ array as $ v)echo $ v、PHP_EOL;
Yaronius

3

print_r()主にデバッグ用です。その形式で出力したい場合は、配列をループして、要素を出力します。

foreach($data as $d){
  foreach($d as $v){
    echo $v."\n";
  }
}

応答に感謝しますが、データを「配列」として出力します
Xavier

@Xavier:更新されたコードを私の答えで試しましたか?両方の配列をループする必要があります。 $data配列の配列です。
ロケットハズマット

コードも完全に機能しました/ nを<br />に変更しました
Xavier


2

デバッグにprint_rを使用していると思います。次に、Kintなどのライブラリを使用することをお勧めします。これにより、大きな配列を読み取り可能な形式で表示できます。

$data = [['Natural Child 1', 'Natural Child 2', 'Natural Child 3']];
Kint::dump($data, $_SERVER);

ここに画像の説明を入力してください


1
これは単純なPHPソリューションではありませんが、間違いなく有用で読みやすい出力を提供します!
Sean the Bean

1
<?php 
//Make an array readable as string
function array_read($array, $seperator = ', ', $ending = ' and '){
      $opt = count($array);
      return $opt > 1 ? implode($seperator,array_slice($array,0,$opt-1)).$ending.end($array) : $array[0];
}
?>

これを使用して、きれいに印刷された配列を訪問者に表示します


1

var_dump関数を使用して、phpでフォーマットされた配列を印刷する非常に良い方法。

 $a = array(1, 2, array("a", "b", "c"));
 var_dump($a);

1

キーとその値を取得するためにこれを使用します$ qw = mysqli_query($ connection、$ query);

while ( $ou = mysqli_fetch_array($qw) )
{
    foreach ($ou as $key => $value) 
    {
            echo $key." - ".$value."";
    }
    echo "<br/>";
}


1

簡単なJSON表現のためのワンライナー:

    echo json_encode($data, JSON_PRETTY_PRINT);

プロジェクトでcomposerをすでに使用している場合は、symfony / yamlと以下を必要とします:

    echo Yaml::dump($data);

0
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}

0

分解を使用できる単一の配列の場合は、よりきれいに印刷できます。

<?php
$msg = array('msg1','msg2','msg3');
echo implode('<br />',$msg);
echo '<br />----------------------<br/>';

echo nl2br(implode("\n",$msg));
echo '<br />----------------------<br/>';
?>

多次元配列の場合は、ある種のループと組み合わせる必要があります。

<?php
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
foreach($msgs as $msg) {
    echo implode('<br />',$msg);
    echo '<br />----------------------<br/>';
}
?>

0

これによりprint_r()、コンソールアプリケーションの出力フォーマットが改善されます。

function pretty_printr($array) {

  $string = print_r($array, TRUE);

  foreach (preg_split("/((\r?\n)|(\r\n?))/", $string) as $line) {

    $trimmed_line = trim($line);

    // Skip useless lines.
    if (!$trimmed_line || $trimmed_line === '(' || $trimmed_line === ')' || $trimmed_line === 'Array') {
      continue;
    }

    // Improve lines ending with empty values.
    if (substr_compare($trimmed_line, '=>', -2) === 0) {
      $line .=  "''";
    }

    print $line . PHP_EOL;
  }
}

例:

[activity_score] => 0
[allow_organisation_contact] => 1
[cover_media] => Array
        [image] => Array
                [url] => ''
        [video] => Array
                [url] => ''
                [oembed_html] => ''
        [thumb] => Array
                [url] => ''
[created_at] => 2019-06-25T09:50:22+02:00
[description] => example description
[state] => published
[fundraiser_type] => anniversary
[end_date] => 2019-09-25
[event] => Array
[goal] => Array
        [cents] => 40000
        [currency] => EUR
[id] => 37798
[your_reference] => ''
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.