将数组元素分配给具有相同名称的变量?

时间:2009-11-11 12:19:50

标签: php arrays function

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

假设我有

$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) ;

$ 2未创建且$ myarray未更改。

5 个答案:

答案 0 :(得分:3)

试试这个:

$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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

你可以做到

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

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

您还可以查看extract()

答案 3 :(得分:0)

为什么不这样:

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

输出

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

答案 4 :(得分:0)

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

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

鉴于单个元素数组$ arr = array(“one”=>“eins”)和你的函数suck(),这就是:

首先你叫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