PHP:使用字符串';地址';数组中某个值的
我有一个person数组,名称为key'n'。“n”的值是一个数组,其中键“l”(last的缩写)具有我想要获取的值,即姓氏 出于奇怪的编程原因,我将姓氏的“地址”作为字符串 我该怎么做?PHP:使用字符串';地址';数组中某个值的,php,arrays,string,indexing,Php,Arrays,String,Indexing,我有一个person数组,名称为key'n'。“n”的值是一个数组,其中键“l”(last的缩写)具有我想要获取的值,即姓氏 出于奇怪的编程原因,我将姓氏的“地址”作为字符串 我该怎么做? 我试过eval等 对不起,我说的不清楚 我想要的是使用变量$test来获取它 例如,类似于: $person[$test] (这显然不起作用,但什么起作用?) $test并不总是“两个深度”。例如,有时是['a']['residential']['street'] <?php $test =
我试过eval等 对不起,我说的不清楚 我想要的是使用变量$test来获取它 例如,类似于:
$person[$test]
(这显然不起作用,但什么起作用?)
$test
并不总是“两个深度”。例如,有时是['a']['residential']['street']
<?php
$test = "['n']['l']";
echo "I've got a string with the array index ".$test. "\n";
$person = array("n"=>array('l'=>'SMITH'));
echo 'the array, $person, is this: '."\n";
print_r($person);
echo "What I want is ".$person['n']['l']. "\n";
?>
我相信这将使它按照您期望的方式工作:
这将输出SMITH-see
我想这对你不起作用的原因可能与逃避美元符号有关。你几乎只有两个选择:
使用:
或字符串解析:
function helper($array, $key) {
$keys = array_map(function ($val) {
return trim($val, "]['");
}, explode('][', $key));
while ($key = array_shift($keys)) {
if (isset($array[$key])) {
$array = $array[$key];
continue;
}
return null;
}
return $array;
}
echo helper(
array("n"=>array('l'=>'SMITH')),
"['n']['l']"
);
两种输出:
SMITH
在这种情况下,我看不出使用数组的正当理由,这只会使您的编码生活变得复杂。您需要学习的是面向对象编程(OOP)
然后您只需要创建一个包含Person对象数组的People对象
在最简单的形式中,你只需要用一个
People->listOfPersons[0]->fullName->familyName
或者更好地使用getter和setter:
People->getNextPerson()->getFamilyName()
我不完全确定你的问题是什么。您显示您可以访问$person['n']['l'],但这似乎是您的问题。您已经在这样做了,怎么了?我不清楚您的问题,但我肯定不想在回音中显示数组的内容,但您必须使用print_r()我猜op希望使用$test
变量来获取数组位置,而不是在echo上使用静态['n']['l']
$person['n']['l']
part.删除了mongodb标记,因为它与此问题无关(即使数据来自于此)。显然,他的字符串始终具有相同的结构和不同的索引名,否则我怀疑有没有办法做到这一点……他可以使用正则表达式。正则表达式也会有类似的问题。我假设$person数组的结构总是相同的,$test字符串也是一样的(总是['index_1']['index_2'])。我宁愿问这样做的意义是什么,为什么索引会改变等等?谢谢,就是这样!为了在eval中分配一个变量,我只做了:eval(\$foo=\$person$test;)代码>@Dan请注意,您应该非常小心地使用eval。最好不要使用它。我最终选择了这条路线,所以我不必使用eval。
function helper($array, $key) {
$keys = array_map(function ($val) {
return trim($val, "]['");
}, explode('][', $key));
while ($key = array_shift($keys)) {
if (isset($array[$key])) {
$array = $array[$key];
continue;
}
return null;
}
return $array;
}
echo helper(
array("n"=>array('l'=>'SMITH')),
"['n']['l']"
);
SMITH
People->listOfPersons[0]->fullName->familyName
People->getNextPerson()->getFamilyName()