Aynı isimde bir değişken için bir dizi elemanı atama?

5 Cevap php

Ben, bazı dizi öğeleri ayıklamak bir değişkene her biri atamak ve daha sonra dizideki bu unsurları unset mümkün olmak istiyorum.

Diyelim ki var diyelim

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

Ben elle yaptım gibi bir işlevi aynı sonucu ("bir", $ Dizim) emmek istiyorum:

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

(Ben kaldırılacak elemanların isimlerini, $ removethese = array ("bir", "üç") içeren başka bir dizi üzerinde bir döngü içinde bu işlevi kullanmak mümkün olmak istiyorum)

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

ancak bu çalışmıyor. Nasıl değişken atanacak olarak "$ x" demek, ve fonksiyon kapsamı - Ben iki prolbems düşünüyorum. Her durumda, ben yaparsam

suck("two",$myarray) ;

2 $ oluşturulur ve $ myarray değişmez değildir.

5 Cevap

Bu deneyin:

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

Çıktı:

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

Ben yalnızca istediğiniz anahtar => değer çiftleri ile bir yeni bir dizi oluşturmak, ve sonra extract() adresinde atmak istiyorum.

Sen yapabilirsin

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

, Değişken değişkenleri kullanarak. Bu yalnızca "emmek ()" kapsamında iç yeni bir değişken koyacaktır.

Ayrıca extract() adresinde bir göz atabilirsiniz

Neden bu:

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

Çıktı

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

Ben sorunuzu anladım ettiyseniz, siz iki sorun var

Ilk önce anahtar-değer çifti değer olarak $ x değerini ayarlama konum olmasıdır. Sonra yok bir anahtar unsetting ediyoruz. Son olarak, bir şey dönen değil. İşte ne demek istediğimi:

Tek eleman dizi $ dizi = array ("bir" => "eins") verilen ve fonksiyon emmek () bu ne olur:

Önce ("bir", $ dizi) emmek diyoruz. $ X değeri daha sonra hattı $ x = $ arr için "eins" [$ x] değiştirilir. Eğer anahtar "eins" ile bir dizi girdisi yok çünkü o zaman geçersiz unset $ x (deneyin

Bunu yapmanız gerekir:

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

Ancak istiyorum Sonra değerlerini almak (ve diziden çifti kaldırmak) için bu fonksiyonu çağırabilirsiniz. Örnek:

<?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");

?>

Bunun sonucu dizi elemanlarının ("eins", "drei") ile bir dizi olma tercüme denilen dizidir;

HTH JB