$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = '$cars'.$key;
echo $str."\n";
eval($str);
Выход:
$cars[1][0]
PHP Parse error: syntax error, unexpected end of file in ... : eval()'d code on line 1
Я ожидаю, что он напечатает значение, т.е. BMW
Начнем с очевидногокогда Eval зло в PHP?«, который я предполагаю, что вы знаете.
Для вашей ошибки есть несколько причин. Во-первых, код, который вы выполняете, следующий (который вы знаете по мере его печати):
$cars[0][1]
Так же, как это не будет делать ничего в сыром PHP (<?php $foo; ?>
) это также ничего не делает в eval
заявление (я добавил echo
в моем коде, чтобы это исправить). Во-вторых, вы забываете точку с запятой в конце оператора (как и в любом PHP).
Следовательно, правильное утверждение будет выглядеть так:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'echo $cars' .$key . ';'; // "echo $cars[0][1];"echo $str."\n";
eval($str); // will echo "BMW"
Если вы хотите, чтобы значение возвращалось в переменную, используйте return
:
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$key = '[1][0]';
$str = 'return $cars' .$key . ';'; // "return $cars[0][1];"echo $str."\n";
$var = eval($str);
var_dump($var); //string(3) "BMW"
Других решений пока нет …