【发布时间】:2014-09-04 11:32:45
【问题描述】:
我一直在寻找答案,但可能是因为我搜索了错误的术语或概念 - 我还没有找到任何关于如何对提取的参数执行操作的线索。
我有一个动态数组(我无法预测有多少 $vars 或名称或类型)
global $o99_option;
extract( $o99_option );
所以现在,理论上,我可以拥有任意数量的 $vars 以及任何可能的名称..
例子:
$first_var = 'first-var';
$my_second_var = 'another';
$enigma = NULL;
$answer = '42';
我的问题是 - 我如何才能以影响所有创建的 $vars 的方式对提取结果(提取后)执行操作?
例如,假设我想trim 所有这些变量 - 我该如何实现?
(那个,在我扭曲的脑海里,应该和
有同样的效果foreach (extract( $o99_option ) as $single_var ){
do_something($single_var);
}
)
编辑 I:那么,有没有办法对所有提取的元素执行操作? (假设我确实需要提取它们..)或者我应该总是在提取之前这样做(例如在 array_map() 的帮助下) - 或者,我应该像这里的人建议的那样忘记提取曾经存在过从未使用过它..
编辑二:
当然,就像这里的许多人所说的那样,我也可以这样做
$first_var = $o99_option['first-var']; $my_second_var = $o99_option['my_second_var']; $enigma = $o99_option[enigma]; $answer = $o99_option['answer'];
但是
1) 对于 100 多个变量,这样做似乎有点荒谬,并且 2 ) 如何处理我需要使用它们的值作为名称的那些?
例如,我现在使用
${$title_field} = $formdata[$post_title_field];
我知道 $title_field 作为 $o99_option['title_field'] 存在,因此在 extract .. 之后作为变量存在
再一次,我可能完全错了,但到目前为止,脚本运行良好,实际上,@Mark Baker 的第一条评论(使用array_map())可能是在提取之前这样做的最佳选择...
【问题讨论】:
-
不提取;只需在你的 foreach().... 中使用数组本身,或者直接使用
array_map('trim', $o99_options);- 请参阅 docs -
global和extract一起作为显示的唯一代码...对不起,但您几乎同时使用了所有反模式。看看它会给你带来什么问题。 -
如果你解压,你自己说你不知道这个变量会被调用,那你怎么用呢?
-
variable variables!现在你把问题复杂化了......从数组中提取从来都不是一个好主意,也没有必要 -
如果您不知道某些键的名称,提取它们会使您甚至更少使用它们...