ob_start & quot; заморозить & quot; параметры функций в пределах

я новичок в ob_start и застрял в этой функции!

Мне пришлось проанализировать некоторые теги в тексте и заменить другой текстовый возврат из функции.
Проблема в том, что когда я вызываю ob_start, последующие функции сохраняют только первые параметры для всех вызовов последовательностей. Извините за объяснение, я публикую код в оболочке:

http://codepad.viper-7.com/SjKqS1

<html>
<body>
<?php

$data = <<<EOF

фамилия, имя, отчество [имя теста = 12] Кардашьян, Ким
ртуть, [название теста = 3] дсдсс дсддсдсдс сабанана
dsdsdsds [test name = «abcdefg»] frickenoich
EOF;

    $tag = 'test';

$re = "/\\[". $tag ."[\\]| ]/m";

preg_match_all( $re, $data, $match );

$re = "/\[" . $tag . " (.*)\=([\"|\'|[:alnum:]]*)]/m";

$count = preg_match_all( $re, $data, $match, PREG_SET_ORDER );

for( $i = 0; $i < $count; $i++ ) {

$count_args = count( $match[ $i ] );

$args = array();

// if any argouments, make an argouments array
if( $count_args ) {
// make array of argouments
for($arg_idx = 1; $arg_idx < $count_args; $arg_idx += 2){
$args[ $match[ $i ][ $arg_idx ] ] = $match[ $i ][ $arg_idx + 1 ];
}
}
echo 'name='.$args['name'];
echo '<br>';

ob_start();
call_user_func( 'test', $args );
$ret_func = ob_get_clean();
$data = preg_replace( $re, $ret_func, $data);
}

function test( $arg ) {

echo '<br>test(' . $arg['name'] . ')<br>';
}

?>
</body>

0

Решение

Сначала я подумал, что вам нужно включить ob_end_clean лайк:

ob_start();
call_user_func( 'test', $args );
$ret_func = ob_get_clean();
$data = preg_replace( $re, $ret_func, $data);
ob_end_clean();

Но потом я сам выполнил базовый тест:

<?php
$i = 0;
for($i=0; $i<10; $i++)
{
ob_start();
test();
$ret_func = ob_get_clean();
echo '<p>' . $ret_func . '</p>';
ob_end_clean(); //tried with this commented out as well
echo '<p>' . $ret_func . '</p>';
}
function test()
{
echo rand(0,100);
}
?>

И не имеет значения, если я включил ob_end_clean или нет. Таким образом, ваша проблема, вероятно, на самом деле, как вы восстанавливаете args массив в каждой итерации цикла.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]