У меня есть объявление функции, как это:
function func(&$array){//do something};
Тогда у меня есть массив, как это:
$people[gender][singlePerson][property]=>value
Я называю свою функцию так:
func($people[man][person1]);
В моей функции теперь у меня есть параметр $ array, который содержит ссылку на:
$people[man][person1]
Теперь проблема …
Как я могу пройти по ссылке, чтобы получить позицию
$people[man]
Другими словами, имея ссылку $people[man][person1]
как я могу «выровнять» массив?
Если вы пройдете $people['men']['person1']
к вашей функции, нет способа, как эта функция может знать, что этот массив был вложен в $people['men']
вне этого.
как я могу «выровнять» массив?
Ты не можешь И более того: Вам не нужно.
Единственный разумный ответ здесь: изменить дизайн кода в соответствии с вашими требованиями, попробовать другой подход, рассмотреть возможность передачи дополнительных параметров этой функции и т. Д.
Альтернативный подход
Что вам нужно, это класс, а не просто 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 вне функции, вы можете изменять исходный массив изнутри вашей функции.