2011-07-05 59 views
-1

我有一个人员数组,名称中带有一个键'n'。 'n'的值是一个数组,键'l'('last'的缩写)具有我想要获得的值,即姓。PHP:使用数组中值的字符串“地址”获取值

出于好奇的编程原因,我有姓氏的地址字符串

我如何做到这一点?
我试过eval等等。

SORRY我不清楚!

我想要的是使用变量$ test来获取它。

E.g.是这样的:

$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"; 
    ?> 

输出:

 
I've got a string with the array index ['n']['l'] 
the array, $person, is this: 

    Array 
    (
     [n] => Array 
      (
       [l] => SMITH 
      ) 

    ) 

我要的是SMITH

+2

我不完全知道它是你的问题。你表明你可以访问$ person ['n'] ['l'],但这似乎是你的问题。 –

+0

你已经这么做了,怎么了? –

+0

我并不清楚你的问题,但我绝对不希望的回声中显示一个数组的内容,但你必须使用的print_r()http://php.net/manual/en/function.print-r .PHP – JellyBelly

回答

2

你几乎只有两种选择:

使用eval

function IAmEvilSoYouShouldNotCallMe($array, $key) { 
    return eval('return $array' . $key . ';'); 
} 

echo IAmEvilSoYouShouldNotCallMe(
    array("n"=>array('l'=>'SMITH')), 
    "['n']['l']" 
); 

或字符串解析:

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 
+0

我最终走了这条路线,所以我不必使用eval。 – Dan

+0

我最终走了这条路线,所以我不必使用eval()。感谢Yoshi !!!!! – Dan

-2
$index1 = $test[2];  
$index2 = $test[7]; 

echo $person[$index1][$index2]; 
+1

一切都非常好,直到第一个指数是10 ...或2个字符... – acm

+0

obvieusly,这提供了他的字符串始终相同的结构,只是不同的指标名称的字符串,否则我怀疑有办法这样做... –

+0

他可以使用正则表达式。 – Josh

2

我相信这将会使这项工作的方式,你指望它:

这将输出SMITH - 请参阅http://codepad.org/M3jRDg99

eval("echo \$person$test;"); 

我认为它可能不适合你的原因是逃避美元符号。

+0

谢谢,这样做!要分配eval里一个变量,我只是做:'的eval(“\ $ FOO = \ $ $人测试;”);' – Dan

+0

@丹请注意,您应该非常小心使用EVAL。最好不要使用它。 – Yoshi

0

我CA在这种情况下,没有看到使用数组的合法理由,只会让您的编码生活复杂化。你需要学习的是面向对象编程(OOP)。

然后,您只需创建一个People对象,该对象将包含Person对象的数组。

最简单的形式,你会得到一个人的名字只是一个

People->listOfPersons[0]->fullName->familyName 

或getter和setter甚至更好:

People->getNextPerson()->getFamilyName() 
相关问题