首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:我们可以在多维数组中动态地访问任何我们想要的键吗?

PHP:我们可以在多维数组中动态地访问任何我们想要的键吗?
EN

Stack Overflow用户
提问于 2016-07-03 06:37:08
回答 3查看 364关注 0票数 1

我们可以在多维数组中动态地访问任何我们想要的键吗?

代码语言:javascript
复制
$f['Kitchen']['Dishes']['Mantovarka']=3;
$f['Kitchen']['Dishes']['Castrool']=91;
$f['Kitchen']['Dishes']['Separator']=10;
$f['Kitchen']['Product']=18;
$f['Kitchen']['Textile']=19;
$f['Kitchen']['Blue things']['Juicemaker']=25;
$f['Kitchen']['Blue things']['Freegener']=13;
$f['Kitchen1']['Blue things One']['Microwave']=4;
$f['Kitchen1']['Blue things One']['Iron']=24;
$f['Kitchen1']['Dishes One']['Separator']=110;

例如,如果我想分别访问'Kitchen1‘、'Dishes’和'Iron‘。

代码语言:javascript
复制
 var_dump($f['Kitchen1']);
 Output:
 [
    'Blue things One' => [
        'Microwave' => 4
        'Iron' => 24
    ]
    'Dishes One' => [
    'Separator' => 110
    ]
 ]

 var_dump($f['Kitchen']['Dishes']);
 Output:
 [
    'Mantovarka' => 3
    'Castrool' => 91
    'Separator' => 10
 ]

 var_dump($f['Kitchen1']['Blue things']['Iron']);
 Output:
 24

我试图通过以下方式联系到它:

代码语言:javascript
复制
 $kitchenKeys = "{'Kithcen1'}"; 
 var_dump($f[$kitchenKeys]);
 Output:
 NULL

 $dishKeys = "{'Kitchen'}][{'Dishes'}";
 var_dump($f[$dishKeys]);
 Output:
 NULL

 $ironKeys = "{'Kitchen1'}][{'Blue things One'}][{'Iron'}";
 var_dump($f[$ironKeys]);
 Output:
 NULL

我们是否可以动态地将键分配给$kitchenKeys或/和$dishKeys或/和$ironKeys,以获取多维数组中任何键的值?

EN

回答 3

Stack Overflow用户

发布于 2016-07-03 07:04:45

基于的Chay22是正确的

这将会起作用;eval('var_dump($f['.$dishKeys.']);');

您还可以将其作为一个可用的变量,如下所示

代码语言:javascript
复制
eval('$newkey = ($f['.$dishKeys.']);');
var_dump($newkey);
票数 1
EN

Stack Overflow用户

发布于 2016-07-03 07:15:53

或者,您可以使用一个函数来使用点表示法访问内键。例如"key1.key2.key3“。一个这样的例子可以在这里找到:https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php

但是上面描述的eval方法也会起作用。但是,由于未设置键,您更容易出错,并且如果您从用户输入设置动态键,那么清理就成了一个问题。

票数 0
EN

Stack Overflow用户

发布于 2016-07-03 07:18:46

我认为我动态实现的方法是获取一个值的数组,然后在foreach中(如果您要多次使用它,为了显示,我在函数内部)为数组的元素生成一个字符串。然后设置一个包含要运行的命令的字符串,最后使用eval()执行该命令。要小心这些数组将要包含的内容,特别是如果它是用户生成的,因为eval()可能很危险。

代码语言:javascript
复制
$dishKeysArray = array("Kitchen", "Dishes");

$evalString = getEvalString($dishKeysArray);

eval($evalString);

function getEvalString($array){
    $elementString = "";
    foreach($array as $arr){
        $elementString .= "['$arr']";
    }
    $evalString = 'var_dump($f' . $elementString . ');';
    return $evalString;
}

希望这能有所帮助。

注意双引号和单引号的具体用法,因为有时我们希望实际使用数组的值,有时我们希望逐字输出数组名称($f)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38165028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档