【问题标题】:Perform operations after extract()在 extract() 之后执行操作
【发布时间】: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 Ba​​ker 的第一条评论(使用array_map())可能是在提取之前这样做的最佳选择...

【问题讨论】:

  • 不提取;只需在你的 foreach().... 中使用数组本身,或者直接使用 array_map('trim', $o99_options); - 请参阅 docs
  • global extract 一起作为显示的唯一代码...对不起,但您几乎同时使用了所有反模式。看看它会给你带来什么问题。
  • 如果你解压,你自己说你不知道这个变量会被调用,那你怎么用呢?
  • variable variables!现在你把问题复杂化了......从数组中提取从来都不是一个好主意,也没有必要
  • 如果您不知道某些键的名称,提取它们会使您甚至更少使用它们...

标签: php extract


【解决方案1】:

您不能提取变量,您需要将它们保存在$o99_option数组中,否则无法确定元素的数量。

foreach ($o99_option as $variable) {
    // Do something with the variable
}

【讨论】:

    【解决方案2】:

    如果你想对所有变量做点什么:

    foreach ($o99_option as &$variable) {
        $variable = strtoupper($variable); //for example
    }
    

    然后你应该单独处理每个元素。 Don't extract.

    【讨论】:

      【解决方案3】:

      想象一下,您正坐在其中一个儿童球坑中。这是您的变量范围。你有各种各样的变量在这个范围内浮动。现在你会得到一个装满更多彩球的盒子。那些球是重要的球,它们对你来说比你周围的所有其他球都更有趣。

      您对extract 所做的事情是将盒子倒置并将所有这些球倒入球坑中,然后将它们与所有其他球混合。你甚至都不知道那个盒子里到底有什么球,但你还是清空了盒子。好吧,祝你现在再次找到这些球并用它们做任何事情。

      把球放在盒子里!当它们在包装盒中时,您可以一一检查它们。您可以依次查看每一个并对其进行处理。你可以把它们一起放在那个盒子里。不要extract

      如果您知道要在该框中寻找什么:

      echo $o99_option['first-var'];
      

      简单。直接拿那个球,随心所欲。
      如果你想检查一个特定的球是否在盒子里:

      if (isset($o99_option['first-var']))
      

      如果您想查看所有球并对每个球做点什么:

      foreach ($o99_option as $name => $ball) {
          echo "$name: $ball";
      }
      

      【讨论】:

      • 好吧,我总是接受更明智的智慧,但是 - 我什么时候应该使用 extract ?绝不 ??即使在我目前的范围内,我也有大约 300 个已知名称变量。我应该把它们全部拿走并为它们创建新变量吗?例如$my_variable_with_make_sense_name = $o99_option['first-var'] ?顺便说一句 - 因为我现在在中国 - 我真的看不到图像 - 但我相信它很酷 :-)
      • 我基本上从不使用extract,我很难找到有用的案例。可以说你可以用它实现一个简单的模板系统:function render($file, array $vars) { extract($vars); include $file; },但这是我唯一能想到的。您的数组键应该已经有了有用的名称,所以我不确定您为什么坚持首先要从中取出任何东西。 :)
      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多