PHP中的PHP变量变量

时间:2010-04-24 15:03:01

标签: php

感谢下面的帮助,但是我仍然遇到一些问题,我会尝试进一步解释:

我有一个变量如下:

$value['questions'];

现在,我需要在循环中进行检查,所以我在循环中有这段代码:

if($results[$value['questions']]==4){blah blah blah};

但我遇到的问题是$value['questions']的值是q1但是我需要q1在代码的$ results部分中是一个字符串(i.e. inside quotes ''),所以$ results元素应该看起来像这样......

if($results['q1']==4){blah blah blah};

目前看起来像这样

if($results[q1]==4){blah blah blah};

有意义吗?

再次感谢您的帮助。

大家好,

我希望有一个简单的解决方案!

我有一个变量:

$results['q1'];

是否可以将'q1'元素作为变量,如下所示:

$results['$i[question]'];

未能在Google上找到解决方案并研究PHP手册......

有人有建议/解决方案吗?

谢谢,

荷马。

4 个答案:

答案 0 :(得分:6)

是的,访问数组元素时可以使用变量

举个例子,考虑这部分代码:

$results = array(
    'a' => 'sentence a', 
    'b' => 'hello !', 
);

$indice = 'a';
echo $results[$indice];

将提供以下输出:

sentence a


在这里,$indice是一个非常简单的变量,但您可以在[]之间使用任何您想要的内容,例如:

  • 功能:$results[ my_function($parameter) ]
  • 数组元素:$result[ $my_array['indice'] ]
    • 这似乎是你想做的事情?
  • 对象属性:$result[ $obj->data ]
  • ...

基本上,你可以使用你想要的任何东西 - 只要它评估为标量值(即一个整数,字符串)


在您的具体情况下,您可以$results声明有点像这样:

$results = array(
    'q1' => 'first question', 
    'q2' => 'second question', 
);

$i将以这种方式宣布:

$i = array(
    'question' => 'q1'
);

这意味着$i['question']将是'q1',以及以下代码部分:

echo $results[ $i['question'] ];

会得到这个输出:

first question



修改:要回答您在问题标题中使用的特定字词,您还可以在PHP中使用所谓的 variable variable

$variable = 'a';
$indice = 'variable';
echo $results[ $$indice ];

这里:

  • $indice'variable'
  • $$indice'a'
  • 表示您将获得与之前相同的输出


当然,不要忘记阅读PHP手册的Arrays部分。

Why is $foo[bar] wrong? 段可能会引起人们的兴趣,特别是考虑到您发布的示例。



编辑OP后编辑:

如果$value['questions']'q1',则代码的以下两部分为:

if($results[$value['questions']]==4){blah blah blah}

if($results['q1']==4){blah blah blah}

应该做同样的事情:使用$results[$value['questions']]$value['questions']部分将在表达式的其余部分之前被评估(到'q1'),并且该部分将与$results['q1']


例如,以下代码部分:

$results = array(
    'q1' => 4, 
    'q2' => 6, 
);
$value = array('questions' => 'q1');

if($results[$value['questions']]==4) {
    echo "4";
}

输出4

答案 1 :(得分:4)

你可以这样做:

$results[$i['question']];

这将首先访问数组$i,以获得与 'question'对应的。该值将用作数组$results的键。

你的方式:$results['$i[question]']; 实际上是在尝试获取与数组'$i[question]'中的键$results对应的值。由于键是单引号,变量插值会发生,并且字面上会处理整个字符串。

或者您也可以这样做:

   $results["$i[question]"]; // using double quotes also works.

示例:

$arr1 = array('php' => 'zend', 'java' => 'oracle');
$arr2 = array('p' => 'php', 'j' => 'java');

echo $arr1[$arr2['p']]; // prints zend.
echo $arr1["$arr2[p]"]; // prints zend.

答案 2 :(得分:0)

<?php

$result['q1'];

// is equivalent to

$index = 'q1';
$result[ $index ];

现在$index可能会像您希望的那样复杂。例如,这样的事情也是可能的:

$result[ 'q' . round( $someArray[$i] / 2 ) ];

答案 3 :(得分:0)

<强> CODE

<?php

$results = array(
    'q1' => 'This is a result called q1.',
    'q2' => 'So, can you access this?',
    '$i[question]' => 'This is a result called $i[question]',
);

$i = array(
    'question' => 'q2',
    'answer'   => 'Yes.'
);

echo '<pre>';
echo $results['q1'] . "\n";              // Using Array's is easy -
echo $results['$i[question]'] . "\n";    // all you gotta do is make sure
echo $results[$i['question']] . "\n";    // that you understand how
echo $i['answer'];                       // the keys work.

?>

<强>输出

This is a result called q1.
This is a result called $i[question]
So, can you access this?
Yes.