صفيف مع القيم البريدية يمكن الوصول إليها عدديا

StackOverflow https://stackoverflow.com/questions/1118180

  •  12-09-2019
  •  | 
  •  

سؤال

لدي مجموعة أساسية قد أحتاج إلى الوصول إليها عدديا (أي الحصول على قيمة المفتاح الخامس).

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

أحتاج أن أكون قادرا على القيام به:

$data['one']

و

$data[0]

للحصول على نفس القيمة، "شيء".

فكرتي الأولية هي إنشاء غلاف فئة يقوم بتنفيذ ArrayAccess مع Offsetget () وجود رمز لمعرفة ما إذا كان المفتاح رقمي وتتصرف وفقا لذلك، باستخدام 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]);
    }    

}

أتساءل عما إذا كان هناك أي مكان مبني في PHP للقيام بذلك. كنت أفضل استخدام الوظائف الأصلية، ولكن حتى الآن لم أر أي شيء يفعل هذا.

أيه أفكار؟

شكرا،
فانيس

هل كانت مفيدة؟

المحلول

لقد لاحظت أنك ذكرت أنها مجموعة نتيجة قاعدة بيانات Readonly

إذا كنت تستخدم MySQL، فيمكنك القيام بشيء مثل هذا

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

mysql_fetch_array إرجاع صفيف مع كلا المفاتيح الارتباطية والرقمية

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

نصائح أخرى

how about this 

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

then 
$keys = array_keys($data);

Then 
$key = $keys[$index_you_want];

Then 
echo $data[$key];

لا توجد طريقة مدمجة للقيام بذلك.

إذا كان الأمر الأمرا واحدا يمكنك استخدام شيء مثل:

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

لن يتم تحديث هذا أثناء إضافة عناصر جديدة إلى الصفيف رغم ذلك.

في بعض الأحيان يكون من الأسهل التحقق مما إذا كان لديك مفتاح مشترك أو مؤشر به is_int()

if(is_int($key))
    return current(array_slice($data, $key, 1));
else
    return $data[$key];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top