Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работать с массивом в другой функции? / 11 сообщений из 11, страница 1 из 1
23.07.2017, 15:34
    #39493586
u78
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
23.07.2017, 16:57
    #39493600
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работать с массивом в другой функции?
передать по ссылке

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

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

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

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

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

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

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

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

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

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

ЗЫ перевод кривой
...
Рейтинг: 0 / 0
23.07.2017, 18:30
    #39493632
u78
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
23.07.2017, 18:32
    #39493633
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работать с массивом в другой функции?
u78,

да он про то, что ты говоришь, что в PHP 5.4 нельзя передавать по ссылке. Но передавать то можно, только остался один способ.
...
Рейтинг: 0 / 0
23.07.2017, 18:40
    #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
23.07.2017, 18:40
    #39493636
u78
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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работать с массивом в другой функции? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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