2013-06-21 6 views
0

У меня есть переменная $doctype, что является массивом:Pass текущий массив в качестве ссылки [PHP/Drupal6]

$doctype = array(
    'news' => ('news'), 
    'documents' => ('documents'), 
    'forms' => ('forms'), 
    'other' => ('other'), 
); 

, который используется в качестве опции для другого массива:

$form['doc_type'] = array(
    '#title' => 'Document Type', 
    '#type' => 'radios', 
    '#options' => $doctype, 
    '#size' => '30', 
    '#required' => TRUE, 
    '#default_value' => $doctype['news'], 

теперь я пытается передать текущее значение для другой функции

Я попытался:

form($form_state, &$doctype) { 

, но он показывает, как отсутствующий аргумент

Я хочу, чтобы передать его через ссылку, а не как возвращение (уже заняты/не хотят работать вокруг него)

Любая помощь приветствуется

+0

Независимо от того, является ли аргумент ссылкой ссылкой определения функции, а не вызывающего. – Barmar

+0

Если вы пытаетесь избежать ненужного копирования, PHP позаботится об этом для вас. Он использует copy-on-write, поэтому он делает только копию, если функция изменяет аргумент. – Barmar

ответ

2

Предполагая, что form() указывает свой второй аргумент как ссылку, вы не должны передавать &$doctype в качестве параметра. Если функция указывает параметр в качестве ссылки, то все, что вам нужно сделать, это передать эту переменную, и она будет передана в качестве ссылки.

E.g.

<?php 
    function form($var1, &$var2) { 
     $var2[2] = 5; 
    } 
    $var2 = array(1,2,3,4); 
    form('test', $var2); 
    echo $var2[2]; // Echoes '5'; 
?> 

Однако я еще раз при условии, что form() встроен в Друпала, в этом случае, насколько я знаю, что нет никакого способа прохождения $doctype в качестве ссылки без изменения основного кода, который определяет form()

Из любопытства, почему вам нужно передать его в качестве ссылки? Можете ли вы уточнить, что «уже заняты/не хотят обойти это»

+0

Мне нужно, чтобы он прошел так, когда они загружают файл, его каталог основан на том, что у них есть тип документа. Функция уже возвращает $ form, и я не могу вернуть более одного значения, не возвращая массив или объект, и я пробовал оба из этого, поэтому я просто сказал, что люди не предлагают делать то, что я уже пробовал. –

+0

Кроме того, просто ссылаясь на собственную форму функции var ($ formstate, $ doctype), дает мне ошибку с отсутствующим аргументом –

+1

Где определяется 'form()'? Я предполагаю, что для этого требуется более двух аргументов, или вы не определяете один из двух. Несмотря на это, учитывая ваши требования, вам, вероятно, понадобится написать собственную реализацию 'form()', чтобы выполнить то, что вы пытаетесь сделать. – jraede