Bir fonksiyonu ile çok boyutlu bir dizinin elemanlarına erişim

1 Cevap php

Ben çok boyutlu bir dizinin elemanlarına erişmek için, argüman değişken sayısı ile bir işlev gerekir. Ben ($ this-> _CONFIG dizidir) bu şekilde yaptım ...

function item()
{
    if(func_num_args() != 0){
        $config = $this->_config;
        $args = func_get_args();
        foreach($args as $item){
            $config = $config[$item];
        }
        unset($args);
        return $config;
    }
    else throw new Exception('An item index is required.');
}

Daha iyi yapmak için bir yolu var mı? Herkese teşekkürler!

1 Cevap

Sorunuzu Eğer çok boyutlu bir dizi var ki, bu yüzden bu gibi atın:

$config = array('foo' => array('bar' => array('baz' => 3)));

item('foo', 'bar', 'baz') son diziye giden tüm yol boyunca koşmak ve 3 dönecekti çağırıyor. Eğer istediğiniz buysa, sadece yazmak $config['foo']['bar']['baz'] veya {[(2 daki yapılandırmaları koyabilirsiniz tüm iç içe diziler çok sonra ArrayObjects olmalı ama)]} ve) (dizi erişimi gösterimi veya $config->foo->bar->baz kullanabilirsiniz.

Eğer işlevi tutmak istiyorsanız onu kapmak önce PHP tanımlanmamış endeksleri hakkında Bildirimi çıkaracağız çünkü, endeks üzerinde bazı kontroller eklemek gerekir. Buna ek olarak, neden InvalidArgumentException yerine İstisna kullanmayın. Bu durumda daha iyi uyuyor.

edit: removed some portion of the answer, because it was more like loud thinking

edit after comments
Tbh, I find it a rather awkward approach to reinvent array access through a method like this. In my opinion you should either pass the entire config or a subset to your objects during construction and let them take whatever they need through the regular array accessors. This will decouple your objects from your configManager and allows for easier modification at a later point.