Сброс многих переменных в PHP

Я уверяю, что это очень распространенная ситуация, когда вам нужно тестировать переменные (а их много!), Как в этом примере (я назвал такие переменные только для того, чтобы писать меньше усилий):

    $variable0='red';
    $variable1='blue';
    $variable2='green';
    $variable3='pink';
    $variable4='purple';
    $variable5='hellow';
    $variable6='foo';
    $variable7='bar';
    $variable8='hi';
    $variable9='bye';

    echo
    '$variable0='.$variable0.'<br>
$variable1='.$variable1.'<br>
$variable2='.$variable2.'<br>
$variable3='.$variable3.'<br>
$variable4='.$variable4.'<br>
$variable5='.$variable5.'<br>
$variable6='.$variable6.'<br>
$variable7='.$variable7.'<br>
$variable8='.$variable8.'<br>
$variable9='.$variable9;

Мой вопрос: есть ли лучший способ сделать это эхом / дамп / печать проще?

Конечно, есть и другие способы выполнения той же президентской работы:

        $x=
    '$variable0='."$variable0\n".
    '$variable1='."$variable1\n".
    '$variable2='."$variable2\n".
    '$variable3='."$variable3\n".
    '$variable4='."$variable4\n".
    '$variable5='."$variable5\n".
    '$variable6='."$variable6\n".
    '$variable7='."$variable7\n".
    '$variable8='."$variable8\n".
    '$variable9='."$variable9"
    echo nl2br($x);

Или же:

    $x=<<<HEREDOC
\$variable1=$variable1
\$variable2=$variable2
\$variable3=$variable3
\$variable4=$variable4
\$variable5=$variable5
\$variable6=$variable6
\$variable7=$variable7
\$variable8=$variable8
\$variable9=$variable9;
HEREDOC;
    echo nl2br($x);

Но, может быть, в PHP есть функция, чтобы сделать это проще?

Кстати, все 3 решения выше повторяют одно и то же:

$variable1=blue<br>
$variable2=green<br>
$variable3=pink<br>
$variable4=purple<br>
$variable5=hellow<br>
$variable6=foo<br>
$variable7=bar<br>
$variable8=hi<br>
$variable9=bye;

7 ответов

Решение

Вводя compact:

var_dump(compact('foo', 'bar', 'baz'));

Обратите внимание, что я явно использовал три очень разные переменные: $foo, $bar а также $baz,
Если вы на самом деле есть буквально $foo1, $foo2 и т.д., вы действительно хотите использовать вместо этого массив. Сбросить это тоже будет тривиально:

$foo    = array();
$foo[0] = 'bar';
$foo[1] = 'baz';
var_dump($foo);

В общем, если у вас слишком много переменных, плавающих вокруг, ваша область видимости слишком велика, и вам следует преобразовать все в несколько меньших функций, или ваш алгоритм более сложный, чем должен быть, или вы должны использовать массивы или другие структуры данных вместо.

get_defined_vars() будет в состоянии сделать это. Может быть излишним (будут показаны все доступные переменные):

print_r( get_defined_vars() );

Возвращаемые значения: многомерный массив со всеми определенными переменными *.
* В функции будут показаны только локальные переменные $vars и те, которые определены как глобальные.

Примечание: это делает именно то, что вы ищете, но методы массива, упомянутые в других ответах, будут более логичными, см. Ниже:


Лучший способ установить значения - использовать массив, так как вы "группируете" несколько значений вместе:

$color[] = 'red'; // will automatically start with key=0
$color[] = 'blue'; // key=1
$color[] = 'green';// key=2 etc
print_r( $color );
echo $color[1]; // Blue, same as your echo $variable1;

Вместо этого вы можете объявить свои переменные как ключи из массива

$myarray=Array();

$myarray['variable0']='red';
$myarray['variable1']='blue';
$myarray['variable2']='green';
$myarray['variable3']='pink';
$myarray['variable4']='purple';
$myarray['variable5']='hellow';
$myarray['variable6']='foo';
$myarray['variable7']='bar';
$myarray['variable8']='hi';
$myarray['variable9']='bye';

и распечатать их все

echo '<pre>';
print_r($myarray);
echo '</pre>';

затем, если вам все еще нужно использовать их как отдельные переменные, выполните

extract($myarray)

создаст $variable0 to $variable9 в глобальном контексте.

Если вы знаете верхнюю и нижнюю границы и все переменные имеют одинаковое имя, вы можете сделать следующее:

for ($i = 0; $i < $end; ++$i) { echo ${'value_name'. $i}; }

Это должно дать вам результат, который вы ищете:

function get_var_name($var) {
    foreach($GLOBALS as $var_name => $value) {
        if ($value === $var) {
            return $var_name;
        }
    }

    return "Variable name not found";
}

function miracle_var_dump($valuesToDump) {

    //For each variable in the $valuesToDump array, print the name and value
    for($i = 0; $i < count($valuesToDump); $i++) {
        echo(get_var_name($valuesToDump[i]) . "=" . $valuesToDump[i] . "<br/>");
    }

}

//Making a call to dump the variables
miracle_var_dump(array($variable0,$variable1,$variable2,$variable3,$variable4,$variable5,$variable6,$variable7,$variable8,$variable9))

Функция get_var_name возвращает имя переменной по заданной переменной (взято из одного из авторов Jeremey Rutins).

//let your variables like this
$variable0='red';
$variable1='blue';
$variable2='green';

//an array to keep all the variable names
$var_names=array();
$var_names[]='$variable0';
$var_names[]='$variable1';
$var_names[]='$variable2';
//etc...

print_var_name($var_names);

function print_var_name($var_names) {
//loop through the array and dump them if they are in $GLOBALS
foreach($GLOBALS as $var_name => $value) {
    if (in_array('$'.$var_name,$var_names)) {
        echo $var_name;
        var_dump($value);
    }
}

Попробуй рефакторинг своего кода и используй массивы

Тогда вы можете сделать print_r или var_dump

Другие вопросы по тегам