Yerli bir php (5 +) işlevi o 1 satırında aşağıdaki nedir var mı?

6 Cevap php
function array_value_from_key($array,$key)
{
     return !empty($array[$key]) ? $array[$key] : null;
}

Ben bir dizi döndüren bir sınıf işlevi var çünkü ben sormak nedenidir.

Bunun yerine yapmak zorunda

$myArray = myClass::giveMeArray();
$myValue = $myArray[$myKey];

Ben çizgisinde bir şey yapmak istiyorum

$myValue = array_value_from_key(myClass::giveMeArray(),$myKey);

Bir nesne döndüğünde, sen gibi nesneyi zincir olabilir

$myValue = myClass::giveMeObject()->aValue;

Voila, güzel ve temiz .. basit ve önemsiz fonksiyonu gibi görünüyor ne bulmak mümkün değil varlık beni deli ediyor ...

PS .. Ben böyle bir işlevi kullanmak istiyorum nasıl bir örnek daha

if(arrayKeyVal(aClass::giveMeArray(),$myKey)) {
    do_something();
}

6 Cevap

Ben denedim, ama değil:

$myValue = @$myArray[$myKey];

i dürüst kullanarak daha iyi olacağını düşünüyorum ama işe yarayabilir

$myValue = (array_key_exists($myKey, $myArray)) ? $myArray[$myKey] : null;

Bunu gibi, bir ArrayObject dönmek olabilir.

<?
class MyClass
{
    public static function getArray()
    {
        $arr = array('dave' => 1, 'bob' => 2, 'james' => 3);
        return new ArrayObject($arr, ArrayObject::ARRAY_AS_PROPS);
    }
}

$var = MyClass::getArray()->bob;

?>

$ MyValue = ($ tmp = myClass :: giveMeArray () && $ tmp [$ mykey])? $ Tmp [$ mykey]: null;

Bu hoş değil, ama tek bir satırda her şeyi yapacağız. ;-)

Bu sorular benzer (ama daha ifadeler üzerine simge desteği olmaması özgü): http://stackoverflow.com/questions/13109/php-access-array-value-on-the-fly

Neden bu kadar gibi giveMeArray () işlevini değiştirmek gerekmez:

function giveMeArray($key = false) {
    $array = $whatever;
    $toret = null;
    if ($key) {
        if (array_key_exists($key, $array)) {
            $toret = $array[$key];
        }
    } else {
        $toret = $array()
    }
    return $toret;
}

Sonra olarak arayabilirsiniz

$arr = myClass::giveMeArray(); //To get the whole array
$value = myClass::giveMeArray($myKey); //To get the specific element

EDIT: çıkıyor Ben PHP5'ta tazelemek gerekiyor. Aşağıda benim cevap yanlış ve PHP5 method chaining yana sadece, PHP4 için geçerlidir.


PHP birçok diğer dillerde olduğu gibi işlevlerden dönüş ifadeleri birlikte zincire izin vermez. Javascript örn:

document.getElementById('abc').style.color = "#fff";

Bu bir ağrı biraz, ama o sadece nasıl. PHP yapmak zorunda eşdeğer geçici değişkenleri depolamak gereğidir. PHP olsaydı burada bunu yazmak zorunda olurdu gibi yukarıda bulunuyor: (tabii ki bu gerçek PHP işlevleri değildir)

$myElement = $document->getElementById('abc');
$myElement->style->color = "#fff";

Bu bir küçük olumlu kolay bir wee biraz hata ayıklama yapar olmasıdır.

Bu sadece işlevleri için geçerlidir: Eğer nesnelerin "zincir" özellikleri yapabilirsiniz:

$myObject->myArray[5]->anotherProperty->anotherArray[3]->anotherObject->aFunction();

Eğer bir fonksiyonun sonucunu kullanmak istiyorsanız yani, kısacası, önce geçici olarak saklamak zorunda