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

  • Автор темы Автор темы DiZZarK
  • Дата начала Дата начала

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]
но что то не работает или я чей-та недопонимаю
Благодарю за помощь!!! :)
 
Последнее редактирование:
Спасибо конечно за участие но нельзя как как то конкретизировать свой ответ!
Функция рекурсивная если передавать массив в аргумент будет передаваться копия массива в текущем шаге цикла т.е. будут производится действия над $array в текущем цикле рекурсии fun() без учета изменений в функции вложением глубже
 
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);
 
@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.
 
99% типовых задач прикладного программирования уже решены в PHP десятилетия назад.
Включая такие задачи, как обход массива и сортировка по некоторому критерию.
Просто надо открыть соответствующий раздел документации и внимательно его изучить на предмет "а чего бы отсюда стащить, чтобы жить легче стало?"
 
нет это не то что мне нужно данная функция только перебирает значения (возможно чего то я не понял)
что мне нужно:
входной массив
$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 работает по данной логике за исключением того что не может разобрать массив так как он передается копией а не ссылкой на память массива
 
1. Передай ссылкой, какие проблемы…
2. Напиши нормально задачу. А то твой алгоритм не стыкуется с исходными данными.
 
Последнее редактирование:
1. Передай ссылкой, какие проблемы…
Вот здесь мне и нужна помощь как передать этот массив внутрь функции
Алгоритм не имеет никакого значения вообще поэтому я и не указывал его а показал только ту часть где имею проблему

Пошукал нашел это http://php.net/manual/ru/language.references.pass.php
http://php.net/manual/ru/language.references.whatdo.php
ну и похожие вещи
тольку ноль пока раньше було счас немае
 
Последнее редактирование:
1. Передай ссылкой, какие проблемы…
Задача решена
PHP:
function fun(&$array) {//здесь добавить &

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