PHP: 如何通过子引用来遍历关联数组?

PHP: How to traverse an associative-array by having a child's reference?

我有一个这样的函数声明:

function func(&$array){//do something};

然后我有一个这样的数组:

$people[gender][singlePerson][property]=>value

我这样调用函数:

func($people[man][person1]);

在我的函数中,现在我的参数 $array 包含对以下内容的引用:

$people[man][person1]

现在问题... 我如何遍历引用来获取位置

$people[man]

换句话说,有引用 $people[man][person1] 如何在数组上连接 "level up"?

如果您将 $people['men']['person1'] 传递给您的函数,则此函数无法知道此数组已嵌套在其外部的 $people['men'] 中。

how can i "level up" on the array?

你不能。更重要的是:你不需要

这里唯一合理的答案是:更改代码设计以满足您的要求,尝试不同的方法,考虑向该函数传递额外的参数等。

替代方法

你需要的是一个class而不只是一个函数;将此视为调用:

(new my_class($people))->func($people[man][person1]);

您将把整个数组传递给您的 my_class 实例,这样您就可以将其存储在变量中或将其作为引用传递。

你的 class 应该是这样的:

class my_class {

 private $my_people;

 public function __construct($outside_people) {
    $this->my_people = $outside_people;
 }

 public function func($person){
    .....
 }

}

现在您可以从函数内部访问 $this->my_people

另一种替代方法

只需在第二个变量中传递数组。您需要通过引用传递它:

func($person, &$full_array){
....
}

然后像这样调用你的函数:

func($people[man][person1], $people);

由于 $full_array 是函数外部对 $people 的引用,您可以从函数内部修改原始数组。