1

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

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


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

因此,使用 $incoming 变量我想从数组中获取相应的数据,但无法弄清楚如何将字符串转换为数组索引查找。

我试图想出一种不管数组中嵌套级别如何都可以工作的方法。

4

4 回答 4

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
于 2012-04-13T21:55:51.660 回答
0

假设总是有 3 个或更少的键,这将起作用。您可以添加“$keyX” vars 和“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];
}
于 2012-04-13T22:01:34.273 回答
0

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

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

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

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

于 2012-04-13T22:03:23.697 回答
0

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

于 2012-04-13T22:10:16.723 回答