使用数组 B 追加到数组 A(是对数组 A 的引用??


appending to array A with array B (being a reference to array A??)

我有两个变量,都是数组:

$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 ) ) )