【问题标题】:Assigning an array element to a variable with the same name?将数组元素分配给具有相同名称的变量?
【发布时间】:2009-11-11 12:19:50
【问题描述】:

我希望能够提取一些数组元素,将它们中的每一个分配给一个变量,然后在数组中取消设置这些元素。

假设我有

$myarray = array ( "one" => "eins", "two" => "zwei" , "three" => "drei") ;

我想要一个函数suck("one",$myarray),结果与我手动执行的结果相同:

$one = "eins" ;
unset($myarray["one"]) ;

(我希望能够在另一个包含要删除的元素名称的数组上循环使用此函数,$removethese = array("one","three"))

function suck($x, $arr) {
$x = $arr[$x] ;
unset($arr[$x]) ;
}

但这不起作用。我想我有两个问题——如何说“$x”作为要分配的变量和函数范围。无论如何,如果我这样做了

suck("two",$myarray) ;

$two 未创建,$myarray 未更改。

【问题讨论】:

  • 你的函数名很烂

标签: php arrays function


【解决方案1】:

试试这个:

$myarray = array("one" => "eins", "two" => "zwei" , "three" => "drei");

suck('two', $myarray);
print_r($myarray);
echo $two;

function suck($x, &$arr) {
  global $$x;
  $$x = $arr[$x];
  unset($arr[$x]);
}

输出:

Array
(
    [one] => eins
    [three] => drei
)
zwei

【讨论】:

    【解决方案2】:

    我会用你想要的键 => 值对构建一个新数组,然后把它扔到extract()

    【讨论】:

      【解决方案3】:

      你可以的

      function suck($x, $arr) {
          $$x = $arr[$x] ;
          unset($arr[$x]) ;
      }
      

      ,使用可变变量。这只会在“suck()”的范围内设置新变量。

      你也可以看看extract()

      【讨论】:

      • 简短评论:您必须将第二个参数 $arr 设置为引用参数 (&$arr) 才能使其工作。
      • 不 - 无论哪种方式,它都不会在函数范围之外工作。
      • 不,但至少它会从数组中删除元素。通过使用 `global $$x' 作为 cletus 建议,您可以将全局与变量的局部范围合并。
      【解决方案4】:

      为什么不这样:

      foreach ($myarray as $var => $val) {
          $$var = $val;
          unset($myarray[$var]);
          echo "$var => ".$$var . "\n";
      }
      

      输出

      one => eins
      two => zwei
      three => drei
      

      【讨论】:

        【解决方案5】:

        如果我理解了这个问题,那么你有两个问题

        首先是您将 $x 的值设置为键值对中的值。然后,您正在取消设置一个不存在的密钥。最后,你没有返回任何东西。这就是我的意思:

        给定单元素数组 $arr= array("one" => "eins") 和你的函数 sink() 会发生这种情况:

        首先你调用suck("one", $arr)。然后 $x 的值在 $x=$arr[$x] 行中更改为“eins”。然后您尝试取消设置 $x (这是无效的,因为您没有键为“eins”的数组条目

        你应该这样做:

        function suck($x, $arr)
        {
        $tmp = $arr[$x];
        unset($arr[$x]);
        return $tmp
        }
        

        然后你可以调用这个函数来获取你想要的值(并从数组中删除这对)。示例:

        <?php
        /* gets odd numbers in german from
        $translateArray = array("one"=>"eins", "two"=>"zwei", "three"=>"drei");
        $oddArray = array();
        
        $oddArray[] = suck($translateArray,"one");
        $oddArray[] = suck($translateArray, "three");
        
        ?>
        

        这样的结果是名为 translate 数组的数组是一个包含元素的数组("eins","drei");

        HTH JB

        【讨论】:

          猜你喜欢
          • 2019-03-11
          • 2012-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2021-06-28
          • 1970-01-01
          相关资源
          最近更新 更多