我有两个变量,都是数组:
$var1=array();
$var1['something']['secondary_something'][1]="foo";
$var1['something']['secondary_something'][2]="foo";
$var1['something']['secondary_something'][3]="foo";
$var1['something']['secondary_something'][4]="foo";
现在我有一个函数,它需要一个数组作为输入:
function something($input=array()){
print_r($input);//print the array out
}//end of function
但是我需要$input
像对$var1
的引用,所以当我调用函数时,附加到变量 2 ($input
) 后,如下所示:
$myInputVar=array();
$myInputVar['something']['secondary_something'][]="foo";
$myInputVar['something']['secondary_something'][]="foo";
//Notice how I append to the var above, not giving a key name in the third dimension of the array.
something($myInputVar);
现在只需打印:
Array ( [something] => Array ( [secondary_something] => Array ( [0] => foo [1] => foo ) ) )
但是我需要第二个变量($input
,来自函数)作为第一个变量($var1
)的引用。
因此,最终结果应该是:
Array ( [something] => Array ( [secondary_something] => Array ( [5] => foo [6] => foo ) ) )
有些人告诉我使用 =&
(这使得一个 var 成为对另一个变量的引用),但我似乎无法弄清楚在这种情况下如何处理=&
。
我正在尝试做的事情甚至可能吗?如果是这样,你能不能给它一些启示。
我正在努力理解您要实现的目标。为什么要打印出阵列?如果要将某些内容推送到数组中,则始终需要一个值和一个数组。
你可以用
function something(&$array, $val) { // take the assigned $array as reference
$array[] = $val;
}
然后打电话给
$test = array();
something($test, 'foo');
print_r($test); // => array ( 'test' )
我希望这有帮助
编辑
function something(&$array, $array_new) {
$array = array_merge($array, $array_new); // to combine/merge both arrays
// please keep in mind that $array is technically $var, because it references to this variable
}
$var1=array();
$var1['something']['secondary_something'][1]="foo";
$var1['something']['secondary_something'][2]="foo";
$var1['something']['secondary_something'][3]="foo";
$var1['something']['secondary_something'][4]="foo";
$myInputVar=array();
$myInputVar['something']['secondary_something'][]="foo";
$myInputVar['something']['secondary_something'][]="foo";
something($var, $myInputVar);
您可以使函数接收对数组的引用。这样:
function something(&$arr) {
$arr['something']['secondary_something'][]="something1";
$arr['something']['secondary_something'][]="something2";
}
现在,您可以执行以下操作:
$var1 = array();
$var1['something']['secondary_something'][1]="foo";
$var1['something']['secondary_something'][2]="bar";
$var1['something']['secondary_something'][3]="foobar";
$var1['something']['secondary_something'][4]="barfoo";
something($var1); //this should now append the items to $var1.
print_r($var1); //check to see if calling 'something' really did add the items.
试试这个:
$var1 = array();
$var2 = array();
assign($var1, $var2, 'foo'); // add an item in both $var1 & $var2
assign($var1, $var2, 'bar'); // append another item it both $var1 & $var2
assign($var1, $var2, 'buz', 5); // add an item in both $var1 & $var2 at index 5
echo print_r($var1, TRUE) . print_r($var2, TRUE);
function assign(&$var1, &$var2, $value, $index=NULL) {
if (is_int($index)) {
$var1['something']['secondary_something'][$index] = $var2['something']['secondary_something'][$index] = $value;
} else {
$var1['something']['secondary_something'][] = $var2['something']['secondary_something'][] = $value;
}
}
这将输出:
Array ( [something] => Array ( [secondary_something] => Array ( [0] => foo [1] => bar [5] => buz ) ) ) Array ( [something] => Array ( [secondary_something] => Array ( [0] => foo [1] => bar [5] => buz ) ) )