如何使用存储为字符串的输入字段名称作为php数组索引

时间:2012-04-13 21:48:56

标签: php

我有一个字段名称通过ajax函数传递给我,我需要用它来查找现有数组中的值。 e.g。

$myarray = array(
    'name' => array(
        '0' => array(
            'first' => 'Steve'
        )
    ),
);


$incoming = 'name[0][first]';

所以使用$ incoming变量我想从数组中获取相应的数据但是无法弄清楚如何将字符串转换为数组指示查找。

我试图提出一种方法,无论数组中的嵌套级别如何都能正常工作。

4 个答案:

答案 0 :(得分:1)

建议#1

更改jQuery以将请求作为JSON发送,可以立即将其转换为json_decode的PHP数组。

建议#2

如果您无法切换到JSON,请使用preg_split拆分传入字段并循环遍历它们以获取正确的数组元素。有点像:

$incoming = 'name[0][first]';

$parts = preg_split('/(\[|\])/', $incoming, null, PREG_SPLIT_NO_EMPTY);

$el = $myarray;
foreach ($parts as $part) {
    $el = $el[$part];
}

echo $el; // Steve

答案 1 :(得分:0)

这将有效,假设总是有3个键或更少。您可以添加“$ keyX”变量和“if($ numkeys == X)”,无论数组有多大,但我找不到更灵活的修复

$incoming = 'name[0][first]';

$numkeys =  preg_match_all('/[\[]/', $incoming, $matches) + 1;

$split = preg_split('/[[\]]/', $incoming);
$key1 = $split[0];
$key2 = $split[1];
$key3 = $split[3];

if($numkeys == 1) {
echo $myarray[$key1];
} elseif ($numkeys == 2) {
echo $myarray[$key1][$key2];
} elseif ($numkeys == 3) {
echo $myarray[$key1][$key2][$key3];
}

答案 2 :(得分:0)

你可以使用eval函数......即使这是非常不推荐的 - 特别是当你得到客户端的字符串时(如果我理解写的话)

 $incoming = 'name[0]["first"]';
 eval('$value = $'+$incoming+';');
 echo $value;

这个脚本应该打印数组中特定单元格的数据......

再次 - 除非您确保输入的格式符合您的期望,否则不建议这样做...

答案 3 :(得分:0)

尝试在这里使用explode函数,在你的例子中 - name [0] [first]将在你的'['爆炸后给出一个数组 - (name,0],first])作为列表/数组。丢弃第一个元素,从剩下的部分中取出']'部分。稍后您可以将它们转换为相应的格式 - 整数,字符串等。