使用 eval 打印数组值

Using eval to print an array value

$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

让我们从明显的“when is eval evil in 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"

DEMO

如果您希望将值返回到变量中,请使用 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"

DEMO