PHP: Fly Erişim Dizi Değer

6 Cevap php

php, ben genellikle bir dizi kullanarak bir değişkeni Haritayı gerekiyor ... ama bir astar bunu yapmak mümkün görünmüyor. Bakınız Örnek:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

Bu küçük bir sorun olduğunu, ancak her seferinde bir süre içinde adamcağız tutar ... ben hiçbir şey için bir değişken kullanmak, aslında sevmiyorum ;)

6 Cevap

Gerçekten, bu ekstra değişken hakkında rahatsız olmaz. İsterseniz bunu kullandıktan sonra olsa da, siz de bellekten kaldırmak olabilir:

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

Yoksa, küçük bir fonksiyon yazabiliriz:

function indexonce(&$ar, $index) {
  return $ar[$index];
}

ve bu çağrı:

$something = indexonce(array('a', 'b', 'c'), 2);

Dizi artık otomatik olarak imha edilmelidir.

Teknik cevap olduğunu Grammar of the PHP language only allows subscript notation on the end of variable expressions olup expressions, genel olarak, çoğu diğer dillerde nasıl olduğunu. Bu açıkça herhangi bir ifade karşı simgeler gideren bir dilbilgisi olması mümkündür, çünkü ben her zaman, dilinde bir eksiklik olarak izlendi ettik. Onlar esnek olmayan bir ayrıştırıcı jeneratör kullanarak konum ya da sadece geriye uyumluluk çeşit kırmak istemiyorum, ancak, durum olabilir.

Burada geçerli ifadeler geçersiz simgeler bir çift daha örnekler:

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.

This is called array dereferencing. It has been added in php 5.4. http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

update[2012-11-25]: PHP 5.5 gibi, dereferencing contants / dizeleri gibi diziler eklendi

Bu doğrudan ilgili olmayabilir .. Ama bu özel sorunun bu yazı bulgu çözüm geldi.

Ben aşağıdaki biçimde bir işlevden bir sonuç var.

Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

what i wanted was the parent_id value "9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a". I used the function like this and got it.

array_pop( array_pop( the_function_which_returned_the_above_array() ) )

So, It was done in one line :) Hope It would be helpful to somebody.

Aslında, şu $ myvar için MyFunc tarafından döndürülen dizinin 3. elemanını atar :) zarif bir çözüm var:

$myvar = array_shift(array_splice(myfunc(),2));

Ya da bunun gibi bir şey, bir değişkene dizi değeri gerekiyorsa

$variable = array('a','b','c');
$variable = $variable[$key];