1

次の簡単なスクリプトを見てください。

ob_start();
$text = array();

echo 'first text';
$text[] = ob_get_clean();

echo 'second text';
$text[] = ob_get_clean();

echo 'third text';
$text[] = ob_get_clean();

echo 'fourth text';
$text[] = ob_get_clean();

print_r($text);

これは以下を出力します:

third textfourth textArray
(
    [0] => first text
    [1] => second text
    [2] => 
    [3] => 
)

しかし、私は期待します:

Array
(
    [0] => first text
    [1] => second text
    [2] => third text
    [3] => fourth text
)

PHPフィドル

4

4 に答える 4

6

これを正しくob_start()行うには、後で 行う必要がありますob_get_clean()

<?php
ob_start();
$text = array();

echo 'first text';
$text[] = ob_get_clean();
ob_start();

echo 'second text';
$text[] = ob_get_clean();

ob_start();

echo 'third text';
$text[] = ob_get_clean();

ob_start();

echo 'fourth text';
$text[] = ob_get_clean();

print_r($text);
?>
于 2013-07-23T15:02:28.547 に答える
5

ob_start()を呼び出す前に、毎回再度呼び出す必要がありますob_get_clean()

ob_start();
$text = array();

echo 'first text';
$text[] = ob_get_clean();

ob_start();
echo 'second text';
$text[] = ob_get_clean();

ob_start();
echo 'third text';
$text[] = ob_get_clean();

ob_start();
echo 'fourth text';
$text[] = ob_get_clean();

print_r($text);
于 2013-07-23T15:02:32.643 に答える
4

ob_get_clean出力バッファリングをオフにします。それは本当にあなたに最初のものだけを与えるべきです。出力バッファリングの第 2 層がアクティブになっているため、2 つ表示されています。

使用してみてください:

$text[] = ob_get_contents();
ob_clean();
于 2013-07-23T15:03:32.660 に答える