【问题标题】:php variables to array - opposite of "extract"php 变量到数组 - 与“提取”相反
【发布时间】:2012-03-11 21:07:47
【问题描述】:

PHP 有一个函数提取,可以像这样转换数组:

$array = array(
 'var1' => 1,
 'var2' => 2
);

到:

$var1 = 1;
$var2 = 2;

现在,我需要相反的,我的变量很少:

$var3 = 'test';
$test = 'another';
$datax = 1;

这需要:

$array = array(
 'var3' => 'test',
 'test' => 'another',
 'datax' => 1
);

PHP中有这样的东西吗?

【问题讨论】:

  • 如果这些是全局范围,你已经在$GLOBALS['test']. $GLOBALS['var3']$GLOBALS reference拥有它
  • 它在manual page for extract 上写着compact。怎么没找到?
  • 正确的答案是“创建一个包含属性 var3、test 和 datax 的类”,但不幸的是,从 SO 的角度来看,这不是您问题的答案。
  • (对于在这里徘徊的初学者。)不,这个特定问题的“正确”答案 - 即没有自以为是或“聪明”,假设实际不存在的各种背景条件...... -- 绝对“创建一个类”,或将任何其他既不需要也没有必要的概念或复杂性纳入问题空间。它与 SO 无关(但与奥卡姆剃刀和一般概念卫生有关)。 (如果问题或上下文是关于架构、OOP 或编码最佳实践等,CodeCaster 会说得通的。)

标签: php arrays extract


【解决方案1】:
$array = get_defined_vars()

get_defined_vars()

【讨论】:

    【解决方案2】:

    您可以使用compact() 来实现此目的。

    $var3 = 'test';
    $test = 'another';
    $datax = 1;
    $array = compact('var3', 'test', 'datax');
    

    参考:http://php.net/manual/en/function.compact.php

    【讨论】:

      【解决方案3】:

      你必须真的确定你想这样做(它会自动包含全局范围内的东西)但你可以使用

      $my_vars = get_defined_vars();
      

      如果你想让它更有选择性,你可以像这样过滤它:

      $my_vars = pack_vars(get_defined_vars())
      
      function pack_vars ($defined_vars)
      {
          $packed = array();
          $ignored = array('dont_use_this', 'ignored_var', 'ignore_this_too');
      
          foreach ($defined_vars AS $key => $value)
          {
              if (!in_array($key, $ignored))
              {
                  $packed[$key] = $value;
              }
          }
          return $packed;
      }
      

      【讨论】:

      • 函数内部 get_defined_vars() 仅返回函数中可用的变量。我以前使用过期望从控制器返回数组的框架。这个功能很有用。请记住在使用之前取消设置任何不需要的变量 - 例如数据库结果集。
      【解决方案4】:

      喜欢这个

      $preDefined = (get_defined_vars());
      $var3 = 'test';
      $test = 'another';
      $datax = "1";
      $newDefined = array_diff(get_defined_vars(), $preDefined);
      print_r($newDefined);
      

      【讨论】:

        猜你喜欢
        • 2011-01-14
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-27
        相关资源
        最近更新 更多