Sayısal erişilen birleştirici değerler ile dizi

3 Cevap php

Ben (yani 5. anahtarının değeri olsun) sayısal erişmek gerekebilir bir ilişkisel dizi var.

$data = array(
    'one' => 'something', 
    'two' => 'else', 
    'three' => 'completely'
) ;

Ben yapmak gerekiyor:

$data['one']

ve

$data[0]

aynı değeri, 'bir şey' almak.

My initial thought is to create a class wrapper that implements ArrayAccess with offsetGet() having code to see if the key is numeric ve act accordingly, using array_values:

class MixedArray implements ArrayAccess {

    protected $_array = array();

    public function __construct($data) {
        $this->_array = $data;
    }

    public function offsetExists($offset) {
        return isset($this->_array[$offset]);
    }

    public function offsetGet($offset) {
        if (is_numeric($offset) || !isset($this->_array[$offset])) {
            $values = array_values($this->_array) ;
            if (!isset($values[$offset])) {
                return false ;
            }
            return $values[$offset] ;
        }                
        return $this->_array[$offset];
    }

    public function offsetSet($offset, $value) {
        return $this->_array[$offset] = $value;
    }

    public function offsetUnset($offset) {
        unset($this->_array[$offset]);
    }    

}

Bunu yapmak için PHP şekilde inşa herhangi yoksa ben merak ediyorum. Ben daha ziyade doğal işlevleri kullanmak istiyorum, ama şimdiye kadar bunu yapan bir şey görmedim.

Herhangi bir fikir?

Thanks,
Fanis

3 Cevap

ben bunu bir salt okunur veritabanı sonuç kümesidir söz ettim

Eğer mysql kullanıyorsanız, o zaman böyle bir şey yapabileceğini

$result = mysql_query($sql);
$data = mysql_fetch_array($result);

mysql_fetch_array birleşmeli ve sayısal hem de tuşları ile bir dizi döndürür

http://nz.php.net/manual/en/function.mysql-fetch-array.php

Bunu yapmak için yerleşik bir yolu yoktur.

Bir kerelik bir şey varsa sizin gibi bir şey kullanabilirsiniz:

$array = array_merge($array, array_values($array));

Eğer olsa diziye yeni öğeler eklemek gibi bu güncelleme olmaz.

Bazen is_int() ile ilişkilendirilebilir bir anahtarı veya bir dizin olup olmadığını kontrol etmek daha kolay

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];