如何使用字符串从嵌套数组中获取值

时间:2015-10-21 16:43:23

标签: php arrays string multidimensional-array

我有一个这样的数组:

$temp = array( '123' => array( '456' => array( '789' => '0' ) ),
               'abc' => array( 'def' => array( 'ghi' => 'jkl' ) )
             );

我有一个这样的字符串:

$address = '123_456_789';

我可以使用上面的数组$temp['123']['456']['789']和字符串$temp获得$address的价值吗?

有没有办法实现这一点,使用它是一种好习惯吗?

3 个答案:

答案 0 :(得分:3)

你好,如果字符串$ address ='123_456_789';在你的情况下你可以使用explode函数通过使用一些分隔符来分割字符串,你可以输出你的值

<?php
$temp = array('123' => array('456' => array('789' => '0')),
    'abc' => array('def' => array('ghi' => 'jkl')),
);
$address = '123_456_789';
$addr = explode("_", $address);
echo $temp[$addr[0]][$addr[1]][$addr[2]];

答案 1 :(得分:3)

这是一个简单的函数,它接受一个数组和一个字符串地址,其中键由任何定义的分隔符分隔。通过这种方法,我们可以使用for循环迭代到所需的数组深度,如下所示。

<?php
function delimitArray($array, $address, $delimiter="_") {
    $address = explode($delimiter, $address);
    $num_args = count($address);

    $val = $array;
    for ( $i = 0; $i < $num_args; $i++ ) {
        // every iteration brings us closer to the truth
        $val = $val[$address[$i]];
        }
    return $val;
    }

$temp = array("123"=>array("456"=>array("789"=>"hello world")));
$address = "123_456_789";
echo delimitArray($temp,$address,"_");
?>

答案 2 :(得分:0)

使用this array library可以通过使用explode将字符串转换为键数组来轻松获得元素值:

Arr::get($temp, explode('_', $address))

或将_替换为.,以利用点表示法访问

Arr::get($temp, str_replace('_', '.', $address))

使用this method的另一个好处是,如果数组中不存在具有给定键的元素,则可以设置默认的后备值以返回。