Author Topic: Как организовать подпрограмму обработки массива? (передать массив в подпрограмму  (Read 1502 times)

0 Members and 1 Guest are viewing this topic.

arma

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Каким образом передать массив в подпрограмму?
Псевдокод того что хотелось бы:
Code: [Select]
define($array1)
define($array2)

//как-то заполняем оба массива

my_subr_process($array1) //обрабатываем первый массив
my_subr_process($array2) //той же процедурой обрабатываем второй массив
my_print($array1)
my_print($array2)
Насколько я понимаю, в подпрограммы параметрами передавать можно только элементарные типы. А если указать массив, передаётся первый элемент.
Можно было бы передать массив через глобальную переменную, но тогда перед вызовом надо скопировать в эту переменную, а потом копировать обратно. Выглядит тяжеловато, особенно если вызываемая подпрограмма - однострочник.
« Last Edit: October 24, 2021, 04:39:32 AM by arma »

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Только поэлементным копированием в цикле, потому что в КМ массивы - динамические. При копировании теряется размер массива и все элементы после первого.

В КМ нет локальных переменных. Все переменные глобальны, из-за этого приходиться для каждого потока делать свою подпрограмму с уникальными названиями. Или делать так чтобы запуск подпрограммы не пересекался во времени в разных потоках
 
« Last Edit: October 24, 2021, 03:37:47 PM by ya12 »

arma

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Если делать передачу через глобальные переменные, возможно ли сделать переименование переменной или ссылку на переменную?
Например в основной программе у меня $array,  а в подпрограмме $subr_array:
Code: [Select]
rename_variable($array,$subr_array)
my_subr_process()
rename_variable($subr_array,$array)
или
Code: [Select]
$subr_array=link_to_variable($array)
my_subr_process()
unlink($subr_array)
« Last Edit: October 24, 2021, 04:28:53 PM by arma »

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
В v4.14.003 есть ARRCONCAT. Смотрите в справке как он работает. Как раз для таких случаев.