PHP - 变量变量&array_merge() - 不工作

我有一堆数组,存储在不同的变量中,如$ required,$ reserved等... </ p>

我想允许(在函数内部)传递一个选项数组(如 $ options = array('required','reserved')</ code> 然后,该数组将用于定义哪些数组合并在一起并在函数末尾返回。</ p>

所以,我在函数的一部分中有这个代码,应该 获取所有选项并合并数组,使用变量变量从options数组中传递的字符串中获取数组):</ p>

  $ array = array(); 
\ nforeach($ options as $ key){
$ array_to_merge = $ {$ key};
array_merge($ array,$ array_to_merge);
}

return $ array;
</ code> </ pre >

但是,当我返回$数组时,它显示0项。 如果我 print_r($ array_to_merge); </ code>,我实际上得到了整个数组。</ p>

array_merge()是不能使用变量变量,或者是 我在这里遗漏了一些东西......?</ p>
</ div>

展开原文

原文

I have a bunch of arrays, which are stored in different variables like $required, $reserved, etc...

I would like to allow (inside a function) an array of options to be passed (like $options = array('required', 'reserved')), and that array would then be used to define which arrays to merge together and return at the end of the function.

So, I have this code in part of the function, that should grab all the options and merge the arrays, using variable variables to get the arrays from the strings passed in the options array):

$array = array();

foreach ($options as $key) {
  $array_to_merge = ${$key};
  array_merge($array, $array_to_merge);
}

return $array;

However, when I return the $array, it shows 0 items. If I print_r($array_to_merge);, I actually get the entire array as I should.

Does array_merge() simply not work with variable variables, or am I missing something here...?

dongliao1949
dongliao1949 在脚本中最好避免使用变量变量,因为它们可能会产生难以调试的混淆。如果这样的事情是相关的,那么通常最好将它们定义为一个名称为索引的数组。
9 年多之前 回复
dqoys62082
dqoys62082 你尝试过array_push()吗?我已经习惯了,并且取得了很大的成功。
9 年多之前 回复

2个回答



array_merge返回合并的数组,你没有将返回值赋给任何东西,因此它就会丢失。</ p> \ n

  $ array = array_merge($ array,$ array_to_merge); 
</ code> </ pre>

应解决您的问题。</ p>
< / DIV>

展开原文

原文

array_merge returns the merged array, you're not assigning that return value to anything and thus it is being lost.

$array = array_merge($array, $array_to_merge);

should fix your problem.

douzhe3516
douzhe3516 这个回答了我的问题,虽然我也非常喜欢马里奥的回答......感谢你们两位的帮助!
9 年多之前 回复
dongyudun6465
dongyudun6465 是的,呃,刚才注意到了。 哎呦! 有时这是最蠢的事情......
9 年多之前 回复



如果我读得正确,你也可以简化你的代码(取代循环)到:</ p>

< pre> $ array = call_user_func_array(“array_merge”,compact($ options));
</ code> </ pre>

compact </ code> 替换变量查找并获取数组列表。 实际上只需要一个 array_merge </ code>调用。</ p>
</ div>

展开原文

原文

If I read it right you can also simplify your code (replaces the loop) to just:

 $array = call_user_func_array("array_merge", compact($options));

compact replaces the variable variable lookup and gets the list of arrays. And in effect there is only one array_merge call necessary.

dongmaqiu6084
dongmaqiu6084 哇,太棒了! 从来没有使用/看过compact(),它几乎完全符合我的需要......不幸的是,我在这里有一个多维数组,所以我不知道在这种情况下紧凑是否最好。
9 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问