Присвоение элемента массива переменной с тем же именем? - PullRequest
0 голосов
/ 11 ноября 2009

Я бы хотел иметь возможность извлечь некоторые элементы массива, назначить каждый из них переменной и затем сбросить эти элементы в массиве.

Допустим, у меня есть

$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 не изменяется.

Ответы [ 5 ]

3 голосов
/ 11 ноября 2009

Попробуйте это:

$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 голосов
/ 11 ноября 2009

Я бы построил новый массив только с теми парами ключ =>, которые вы хотите, а затем подбросил бы его в extract().

1 голос
/ 11 ноября 2009

Вы можете сделать

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

, используя переменные переменные. Это только установит новую переменную внутри области действия «suck ()».

Вы также можете посмотреть на extract()

0 голосов
/ 11 ноября 2009

Если я понял вопрос, у вас две проблемы

Во-первых, вы устанавливаете значение $ x как значение в паре ключ-значение. Тогда вы отменяете ключ, который не существует. Наконец, вы ничего не возвращаете. Вот что я имею в виду:

Учитывая массив одного элемента $ arr = array ("one" => "eins") и вашу функцию suck (), вот что происходит:

Сначала вы вызываете suck ("one", $ arr). Значение $ x затем изменяется на «eins» в строке $ x = $ arr [$ x]. Затем вы пытаетесь сбросить $ 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 array, представляющий собой массив с элементами ("eins", "drei");

НТН JB

0 голосов
/ 11 ноября 2009

Почему бы не это:

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

выход

one => eins
two => zwei
three => drei
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...