Массив в функцию проблемы с областью видимости

DiZZarK

Новичок
Помогите разобраться есть такой кусок
PHP:
<?php
$array = self::$arr;
var_dump($array); //Здесь массив есть

function fun() {
    global $array;
    var_dump($array); //Массива нет
    foreach ($array as $key => $value) {
    /* Тело функции*/
    fun();
    }
}

fun();
Задача передать в рекурсивную функцию fun() область памяти массива $array
передать аргументом функции я не могу т.к. изменения должны затрагивать непосредственно сам массив
Вроде все как здесь
[m]http://php.net/manual/ru/language.variables.scope.php[/m]
но что то не работает или я чей-та недопонимаю
Благодарю за помощь!!! :)
 
Последнее редактирование:

DiZZarK

Новичок
Спасибо конечно за участие но нельзя как как то конкретизировать свой ответ!
Функция рекурсивная если передавать массив в аргумент будет передаваться копия массива в текущем шаге цикла т.е. будут производится действия над $array в текущем цикле рекурсии fun() без учета изменений в функции вложением глубже
 

WMix

герр M:)ller
Партнер клуба
PHP:
$array = self::$arr;
var_dump($array); //Здесь массив есть

function fun($array) {
    var_dump($array); //Массив уже есть
    foreach ($array as $key => $value) {
      /* Тело функции*/
      if(is_array($value)){
        fun($value); // если это рекурсивный массив
      }
    }
}

fun($array);
 

AnrDaemon

Продвинутый новичок
@DiZZarK, вы бы язык сначала выучили, на котором пишете.

PHP:
$array = self::$arr;
var_dump($array); //Здесь массив есть

array_walk_recursive(self::$arr, function(&value){
      /* Тело функции*/
});
http://php.net/array_walk_recursive
Note: написал(а):
If callback needs to be working with the actual values of the array, specify the first parameter of callback as a reference. Then, any changes made to those elements will be made in the original array itself.
 

AnrDaemon

Продвинутый новичок
99% типовых задач прикладного программирования уже решены в PHP десятилетия назад.
Включая такие задачи, как обход массива и сортировка по некоторому критерию.
Просто надо открыть соответствующий раздел документации и внимательно его изучить на предмет "а чего бы отсюда стащить, чтобы жить легче стало?"
 

DiZZarK

Новичок
нет это не то что мне нужно данная функция только перебирает значения (возможно чего то я не понял)
что мне нужно:
входной массив
$array[0]={ a1 => 'Банан', а2 => 'Желтый'}
$array[1]={ a1 => 'Желтый', а2 => 'Цвет'}
$array[2]={ a1 => 'Банан', а2 => 'Африка'}
$array[3]={ a1 => 'Африка', а2 => 'Страна'}
$array[4]={ a1 => 'Африка', а2 => 'Жарко'}
$array[5]={ a1 => 'Цвет', а2 => 'Восприятие'}
логика такая берем 0 значение (удаляем из массива 0 значение)
-> ищем а1 = Желтый (удаляем из массива 1 значение)
-> ищем а1 = Цвет (удаляем из массива 5 значение)
-> таких значений нет продолжаем поиск с начала
-> берем 2 значение (удаляем из массива 2 значение) ... и т.д.
в итоге я должен получить $array==NULL если это верно все значения выбраны цикл завершен
вообще вопрос был насчет global $array; почему оно не работает
вернее функция с переданным аргументом $array работает по данной логике за исключением того что не может разобрать массив так как он передается копией а не ссылкой на память массива
 

AnrDaemon

Продвинутый новичок
1. Передай ссылкой, какие проблемы…
2. Напиши нормально задачу. А то твой алгоритм не стыкуется с исходными данными.
 
Последнее редактирование:

DiZZarK

Новичок
1. Передай ссылкой, какие проблемы…
Вот здесь мне и нужна помощь как передать этот массив внутрь функции
Алгоритм не имеет никакого значения вообще поэтому я и не указывал его а показал только ту часть где имею проблему

Пошукал нашел это http://php.net/manual/ru/language.references.pass.php
http://php.net/manual/ru/language.references.whatdo.php
ну и похожие вещи
тольку ноль пока раньше було счас немае
 
Последнее редактирование:

DiZZarK

Новичок
1. Передай ссылкой, какие проблемы…
Задача решена
PHP:
function fun(&$array) {//здесь добавить &

    foreach ($array as $key => $value) {
    /* Тело функции*/
    fun($array);
    }
}
решение нашел здесь http://www.php.su/learnphp/?re
раздел Жесткие ссылки и пользовательские функции
всем спасибо
тему можно закрывать не знаю как это сделать буду признателен если модер подскажет на будущее
 
Сверху