powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работать с массивом в другой функции?
11 сообщений из 11, страница 1 из 1
как работать с массивом в другой функции?
    #39493586
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я объявляю массив в одной функции, а изменять его хочу в другой.
Это возможно в пхп? Если да, то как?

Вот в такой конструкции func2 получит свой экземпляр массива и его изменение не отразится на переменной $my_array , а как сделать что бы отразилось?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function func1()
{
  $my_array = array(0, 1, 2, 3);
  func2($my_array);
}

function func2($some_array)
{
  unset($some_array[0]);
}



прим. Версия php 5.6
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493600
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
передать по ссылке

Код: php
1.
func2(&$my_array);
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493601
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или функцию объявить подобным образом:

Код: php
1.
function func2(&$some_array)
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493607
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

Начиная с PHP 5.4.0 передача переменной по ссылке стала невозможна, поэтому использование этого приема приведет к фатальной ошибке.
http://php.net/manual/ru/language.references.pass.php

проверьте вашу версию php пожалуйста
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493610
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettпередать по ссылке

Код: php
1.
func2(&$my_array);

Устарело много лет назад, до 5.3 актуально было.

Hettили функцию объявить подобным образом:

Код: php
1.
function func2(&$some_array)

Ага, так, без "или" :-)
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493611
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, отстал я от жизни. Все никак с 5.3 не слезем.
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493619
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78Начиная с PHP 5.4.0 передача переменной по ссылке стала невозможна, поэтому использование этого приема приведет к фатальной ошибке.
угадал все буквы, не смог прочитать слово.

не передача невозможна, а & при вызове не нужен(он указан в определении функции)

ЗЫ перевод кривой
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493632
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

по умолчанию массивы передаются по значению, а не по ссылке, я специально проверил:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
func1();

function func1()
{
    $my_array = array("one", "two", "three");
    echo "<br>func1 " . print_r($my_array,TRUE);
    echo "<br>call func2";
    func2($my_array);
    echo "<br>func1 " . print_r($my_array,TRUE);
}

function func2($my_array)
{
    unset($my_array[0]);
    echo "<br>func2 " . print_r($my_array,TRUE);
}



Выдаёт:
Код: plaintext
1.
2.
3.
4.
func1 Array ( [0] => one [1] => two [2] => three ) 
call func2
func2 Array ( [1] => two [2] => three ) 
func1 Array ( [0] => one [1] => two [2] => three )

как видите func2 меняет массив, но только у себя, а в родительской функции массив остаётся неизменным
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493633
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

да он про то, что ты говоришь, что в PHP 5.4 нельзя передавать по ссылке. Но передавать то можно, только остался один способ.
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493635
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78
Код: php
1.
2.
3.
4.
5.
function func2(&$my_array)
{
    unset($my_array[0]);
    echo "<br>func2 " . print_r($my_array,TRUE);
}



и всего то
...
Рейтинг: 0 / 0
как работать с массивом в другой функции?
    #39493636
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

точно! надо параметр в функции соответственно объявлять

Поменял объявление func2 вот так:
Код: php
1.
function func2(&$my_array)



Теперь полный код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
func1();

function func1()
{
    $my_array = array("one", "two", "three");
    echo "<br>func1 " . print_r($my_array,TRUE);
    echo "<br>call function func2";
    func2($my_array);
    echo "<br>func1 " . print_r($my_array,TRUE);
}

function func2(&$my_array)
{
    unset($my_array[0]);
    echo "<br>func2 " . print_r($my_array,TRUE);
}



Стало вот так:
Код: plaintext
1.
2.
3.
4.
func1 Array ( [0] => one [1] => two [2] => three ) 
call function func2
func2 Array ( [1] => two [2] => three ) 
func1 Array ( [1] => two [2] => three )

Спасибо Hett, vkle_, Изопропил
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работать с массивом в другой функции?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]