PHP:使用数组在另一个多维数组中获取价值

时间:2018-08-14 06:46:31

标签: php arrays multidimensional-array

这是一个特定于WordPress的上下文,但是我的问题更多是与PHP相关的...

我发现自己处于一种奇怪的情况下,我需要使用另一个包含正确顺序的键序列的数组来获得多维数组内部的值。

所以本质上我有一个看起来像

的数组
[0] => 'neighborhood' [1] => 'street' [2] => 'house'

最终我需要的是

get_option( $options_id )['neighborhood']['street']['house']

因此,基本上,我需要通过使用另一个数组递归向下操作,从Options数组中获取'house'的值。

我不能做类似的事情

foreach ( $array as $value ) {
    $sequence .= '[' $value ']';
}
get_option( $options_id ) . $sequence;

因为会用字符串值填充$sequence。我一直在用explode()尝试运气,但是我并不是真正的PHP向导,所以我希望有一个我以前从未遇到过的明显答案。

我知道这很奇怪,但是任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

您可能想创建某种帮助器功能,在其中遍历路径的某些部分,同时跟踪您的临时结果

function deep_array_get(array $path, array $subject) {

   $result = $subject;
   foreach ($path as $p) {
      $result = $result[$p];
   }

   return $result;

}

示例:

$p = ["a", "b", "c"];
$s = [1, 2, "a" => [3, 4, "b" => ["c" => 5]]];
var_dump(deep_array_get($p, $s));

// Result: int(5)

在您的确切用例中,将使用如下所示的内容:

$path = ['neighborhood', 'street', 'house'];
$subject = get_option($options_id);

$result = deep_array_get($path, $subject);

答案 1 :(得分:0)

因此,如果数组始终具有相同的格式,那么我认为最好的做法就是建议kry。

//Example
$array = [0 => 'neighborhood', 1 => 'street', 2 => 'house'];

$options_id = [1,2,'neighborhood'=>[1,2,3,'street'=>[1,2,3,'house'=>[1,2,3,'myhouse']]]];

$result = $options_id[$array[0]][$array[1]][$array[2]];

print_r($result);

这将输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => myhouse
)

您的代码。

$array = [0 => 'neighborhood', 1 => 'street', 2 => 'house'];

//I don't know Wordpress. You can try:
$result = get_option($options_id)[$array[0]][$array[1]][$array[2]]; 

//If that does not work.. Use this.
//$data = get_option($options_id);
//$result = $data[$array[0]][$array[1]][$array[2]];

print_r($result);