Bu soru burada zaten bir cevabı var:
- PHP: Access Array Value on the Fly 7 answers
Bu soru burada zaten bir cevabı var:
Peki, sen duruma bağlı olarak, aşağıdaki çözümlerden birini kullanabilirsiniz:
function foo() {
return array("foo","bar","foobar","barfoo","tofu");
}
echo(array_shift(foo())); // prints "foo"
echo(array_pop(foo())); // prints "tofu"
Yoksa kullanarak döndürülen diziden belirli değerleri kapmak list() yapabilirsiniz:
list($foo, $bar) = foo();
echo($foo); // prints "foo"
echo($bar); // print "bar"
Edit: each() daha önce verdi için örnek kod yanlış oldu. each() bir anahtar-değer çiftini verir. Bu yüzden kullanımı kolay olması foreach() olabilir:
foreach(foo() as $key=>$val) {
echo($val);
}
Array Dereferencing is possible as of PHP 5.4: strong>
function foo() {
return array(1, 2, 3);
}
echo foo()[2]; // prints 3
PHP 5.3 olsun istiyorum ile
Parse error: syntax error, unexpected '[', expecting ',' or ';'
Original Answer:
Bu olmuştur been asked already before. Cevabı hayır. Bu mümkün değildir.
Için quote Andi Gutmans Bu konu hakkında:
This is a well known feature request but won't be supported in PHP 5.0. I can't tell you if it'll ever be supported. It requires some research and a lot of thought.
Ayrıca PHP BugTracker bu request a number of times bulabilirsiniz. Teknik detaylar için, sana official RFC denetlemek ve / veya PHP Internals sorabilirsiniz öneririz.
Diğerleri de söylediğim gibi, bu mümkün değildir. PHP'nin sözdizimi buna izin vermez. Ancak, diğer yönden sorunu saldırır bir önerim var.
Eğer getBarArray
yönteminde kontrol konum ve PHP Standart Kütüphanesi (çok PHP 5.2.x host yüklü ve PHP 5.3 ile birlikte varsayılan olarak yüklenir) erişiminiz varsa, bir {[(1 dönen düşünmelisiniz )]} instead of a native PHP array/collection. ArrayObjects
gibi offetGet code> herhangi bir dizine almak için kullanılabilecek yöntem, böylece kodunuzu görünebilir bir şey var
<?php
class Example {
function getBarArray() {
$array = new ArrayObject();
$array[] = 'uno';
$array->append('dos');
$array->append('tres');
return $array;
}
}
$foo = new Example();
$value = $foo->getBarArray()->offsetGet(2);
Hiç bir yerli dizi / koleksiyon gerekir ve eğer, her zaman sonuçları çevirebilirsiniz.
//if you need
$array = (array) $foo->getBarArray();
Aslında, böyle bir davranışa izin kütüphane yazdık:
http://code.google.com/p/php-preparser/
Işlevleri, yöntemleri: her şeyi ile çalışır. Önbellek, bu nedenle gibi hızlı PHP'nin kendisi gibi olmak :)
benim her zamanki geçici çözüm, bu gibi genel bir fonksiyonu var olmaktır
function e($a, $key, $def = null) { return isset($a[$key]) ? $a[$key] : $def; }
ve daha sonra
echo e(someFunc(), 'key');
Eğer gerekmez zaman bir bonus olarak, bu aynı zamanda 'tanımsız index' uyarısı önler.
foo()[x]
çalışmıyor nedeni olarak, cevabı oldukça kaba ve burada yayınlanacaktır gitmiyor. ;)
Bunlar sorunu yaklaşım için bazı yolları vardır.
Eğer koleksiyon parçası değildir ama ayrı bir anlam var her değişkenleri dizi dönerseniz ilk doğrudan değişkenleri isim kullanabilirsiniz.
Diğer iki yolu değerler topluluğudur sonucu dönen içindir.
function test() {
return array(1, 2);
}
list($a, $b) = test();
echo "This should be 2: $b\n";
function test2() {
return new ArrayObject(array('a' => 1, 'b' => 2), ArrayObject::ARRAY_AS_PROPS);
}
$tmp2 = test2();
echo "This should be 2: $tmp2->b\n";
function test3() {
return (object) array('a' => 1, 'b' => 2);
}
$tmp3 = test3();
echo "This should be 2: $tmp3->b\n";
Son derece getto, ancak, sadece PHP kullanarak yapılabilir. Bu (PHP 5.3 tanıtıldı) bir lambda fonksiyonu kullanır. Görmek ve (ahem, dehşet ve) hayret:
function foo() {
return array(
'bar' => 'baz',
'foo' => 'bar',
}
// prints 'baz'
echo call_user_func_array(function($a,$k) {
return $a[$k];
}, array(foo(),'bar'));
Uzunlukları biz çoğu diğer dillerde de çok güzel şeyler yapmak için geçmek zorunda.
Kayıt için, ben Nolte ne benzer bir şey yapmak. Üzgünüm kimsenin gözleri kanaması yaptıysanız.
Aynı şeyi yapmak için üç yolu vardır:
1. yol:
Chacha102 dediği gibi, endeks değeri döndürmek için işlevini kullanın:
function get($from, $id){
return $from[$id];
}
Sonra, kullanabilirsiniz
get($foo->getBarArray(),0);
böylece birinci elemanı ve elde edildi.
2. yol:
Mevcut ve array_slice kullanan bir tembel yolu:
$first = current(array_slice($foo->getBarArray(),0,1));
$second = current(array_slice($foo->getBarArray(),1,1));
3. yol:
, Dizi ve değerini hem döndürmek için aynı işlevi kullanarak:
class FooClass {
function getBarArray($id = NULL) {
$array = array();
// Do something to get $array contents
if(is_null($id))
return $array;
else
return $array[$id];
}
}
Sonra tüm dizi ve tek bir dizi öğesi elde edebilirsiniz.
$ Dizi = $ foo-> getBarArray ();
veya
$ FIRST_ITEM = $ foo-> getBarArray (0);
Short Answer:
Evet. O kadar uzun fonksiyon sonucu olarak, PHP bir işlevin dönüş değeri çalıştırmak mümkün ve PHP sizin özel versiyonu bunu destekleyecek.
Example2 başvurma:
// can php say "homer"?
// print zoobar()->fname; // homer <-- yup
Cases: