PHP: Как пройти по ассоциативному массиву, имея дочернюю ссылку?

У меня есть объявление функции, как это:

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

Тогда у меня есть массив, как это:

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

Я называю свою функцию так:

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

В моей функции теперь у меня есть параметр $ array, который содержит ссылку на:

$people[man][person1]

Теперь проблема …
Как я могу пройти по ссылке, чтобы получить позицию

$people[man]

Другими словами, имея ссылку $people[man][person1] как я могу «выровнять» массив?

1

Решение

Если вы пройдете $people['men']['person1'] к вашей функции, нет способа, как эта функция может знать, что этот массив был вложен в $people['men'] вне этого.

как я могу «выровнять» массив?

Ты не можешь И более того: Вам не нужно.

Единственный разумный ответ здесь: изменить дизайн кода в соответствии с вашими требованиями, попробовать другой подход, рассмотреть возможность передачи дополнительных параметров этой функции и т. Д.

0

Другие решения

Альтернативный подход

Что вам нужно, это класс, а не просто functoin; используйте это как вызов:

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

Вы будете передавать полный массив вашему экземпляру my_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 вне функции, вы можете изменять исходный массив изнутри вашей функции.

0

По вопросам рекламы [email protected]