[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание нового элемента массива в функции
boro-da
Доброго времени суток, уважаемые форумчане.

Необходимо в функции создать новый элемент глобального массива $array[].

Я искал в интернете подобные вопросы, но хороших результатов было не достаточно, что бы разобраться, поэтому прошу вашей помощи.

Я знаю что внутри функции все переменные локальные, поэтому раньше работал с глобальными через $GLOBALS, и создание новой переменной для меня не было проблеммой, я делал так: $GLOBALS['new_variable'] = value, глобальная переменная успешно создавалась, но теперь мне необходимо создать новый элемент массива с неизвестным(автоматическим) ключём. Помогите, как это записать?



Спустя 2 минуты, 11 секунд (26.10.2011 - 01:14) Игорь_Vasinsky написал(а):
с помощью аргумента функции

Спустя 17 минут, 38 секунд (26.10.2011 - 01:32) boro-da написал(а):
Спасибо Игорь, за столь скорый ответ.

К сожалению он не сильно прояснил моё понимание данного вопроса.

Буду вам сильно признателен, если вы приведёте пример кода реализующего данный подход, для того что бы я смог более полно понять вашу рекомендацию, если вас конечно, это не очень сильно затруднит.

Заранее благодарен.

Спустя 23 минуты, 11 секунд (26.10.2011 - 01:55) Winston написал(а):
$array = array(); // Это ваш т.н. глобальный массив

function foo()
{
global $array; // Говорим ф-и, что мы работаем с глобальным массивом $array
return $array['first'] = 'some value'; // Добавляем новое значение
}

foo(); // Выполняем ф-ю
print_r($array); // После того как ф-я отработала мы получаем значение которое она сгенерировала, в глобальный массив

Так понятней ?


ОФФТОП
Офигеть, такого культурного человека я давно на форуме не видел :blink:

Спустя 10 минут, 57 секунд (26.10.2011 - 02:06) boro-da написал(а):
Уважаемый Winston!

Да, для понимания этот пример обладает достаточной наглядностью.
Благодаря вам, я смог разобраться в данном вопросе, огромное спасибо!


Спустя 5 минут, 17 секунд (26.10.2011 - 02:11) Winston написал(а):
Цитата (boro-da @ 26.10.2011 - 02:06)
огромное спасибо!

Обращайтесь еще smile.gif

Спустя 4 минуты, 55 секунд (26.10.2011 - 02:16) Игорь_Vasinsky написал(а):
снимаю шляпу.

Winston
Свернутый текст
Меня каждый 2й на форуме при случае тыкает носом - что global это зло. Почему бы не использовать аргумент? Я понимаю - что ТС так поставил вопрос, но всё же?

Спустя 6 минут, 31 секунда (26.10.2011 - 02:23) Winston написал(а):
Цитата (Игорь_Vasinsky @ 26.10.2011 - 02:16)
global это зло.

В куче говнокода, это зло. Но можно попробовать с головой работать с этой директивой, ИМХО
Цитата (Игорь_Vasinsky @ 26.10.2011 - 02:16)
Почему бы не использовать аргумент?

Ему нужно не принять переменную из глобали, а наоборот передать в глобаль область, как ты это себе представляешь с аргументом ? blink.gif

Спустя 9 минут, 14 секунд (26.10.2011 - 02:32) Игорь_Vasinsky написал(а):
на скока я понял - он сказал что внутри функции - переменные - локальные - это так, он же даже не вкурсе был - что можно использовать возможность функций принимать аргументы (см 2 пост), по этому юзает global (когда то и я так делал, когда не понимал что такое аргумент.)

и на скоко я помню - твин говорил про зло, не в говнокоде, а вообще. если есть возможность обойтись без - global - обходись без global

Спустя 22 минуты, 28 секунд (26.10.2011 - 02:54) boro-da написал(а):
Игорь, позволю себе вмешаться, но Winston понял мой вопрос в полной степени корректно.
О возможности передачи глобальных переменных я в необходимой степени осведомлён, но в данном случае вопрос поставлен совершенно точно, ни о каком приёме информации внутри функции в моих сообщениях речи не шло, мне было необходимо передать в $GLOBALS определённые области, как и говорится в первом посте.

Приношу извинения, если какой-то частью своей речи в данной теме ввел вас в диссонанс.

Спустя 3 минуты, 29 секунд (26.10.2011 - 02:58) Игорь_Vasinsky написал(а):
да не. нормуль всё. кто как понял - так и разговаривали.

Спустя 8 часов, 52 минуты, 42 секунды (26.10.2011 - 11:50) SlavaFr написал(а):
Цитата (Winston @ 25.10.2011 - 23:23)
В куче говнокода, это зло.
global это и есть первый признак говнокода.

@boro-da нет желания обяснять почему глобаль так плох, так как на это имеются причины о которых уже многократно говорилось.

скажу просто, что это
global $array;  
return $array['first'] = 'some value';

не отличается от
return $GLOBALS['array']['first']='some value';

хотя я не тот не другой вариант не применял бы.

Спустя 4 часа, 41 минута, 13 секунд (26.10.2011 - 16:32) walerus написал(а):
Цитата
хотя я не тот не другой вариант не применял бы.
- Ваши варианты?, мне тоже стало интересно cool.gif

Спустя 1 день, 20 часов, 40 минут, 21 секунда (28.10.2011 - 13:12) SlavaFr написал(а):
Цитата (walerus @ 26.10.2011 - 13:32)
- Ваши варианты?,

Вариант 1 : перейти на программирование классами и использовать статические переменные
Вариант 2: Ислпльзовать Registry паттерн.
Вариант 3: уже преведенный вариант с адресованным параметром Passing by Reference

при этом отдаю предпочтение варианту нр.1
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.